public class Util {
public static void main(String[] args) {
System.out.println(getMj(2000));
}
public static double calculateArea(double n){
if(n==1){
return 1.0;
}else{
double r = (n-1) * (n-1) * (n+1) * (2*n+1) / (n * n * n * (2*n-1));
return r*getMj(n-1);
}
}
}
递归算法前提是要了解它的通项公式,2000意味着将曲边三角形分割成了2000个矩形,具体原理可以参考下图所示:
采用图1算法:
an=(n+1)(2n+1) /6n^2
简单写法如下:
public class Util {
public static void main(String[] args) {
System.out.println(getMj(100000));
}
public static double calculateArea(double n){
return (n+1)*(2*n+1)/(6*n*n);
}
}
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须确保有一个明确的递归结束条件,也被称为递归出口。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。
下面这个例子以递归的方法计算n的阶乘。
public class Test {
public static int factorial(int n) {
if(n == 0){
return 1;
}else{
return n * factorial(n-1);
}
}
public static void main(String[] args) {
System.out.println(factorial(3));
}
}
package souce;
public class Search {
public static boolean binarySearch(int[] a, int x, int left, int right) { // 二分查找的主方法 // ... }
if (x == a[left] || x == a[right]) { return true; // 找到,返回 true }
如果(right-left)的结果是负数,那么表示右边的值比左边的值小。
int mid = (left+right)/2; //否则:二分
if(x == a[mid]) return true; // 找到中间元素,返回true
else{ //否则
如果x大于中间元素,则返回二分查找函数(binarySearch)在右半部分数组(a)中继续查找x,即binarySearch(a,x,mid+1,right)。这样可以缩小查找范围,提高查找效率。
else return binarySearch(a, x, left, mid-1); // 如果目标值小于中间元素,在左半部分继续查找。
}
}
public static final int[] sort(int[] a) { // 这是一个用于对整型数组进行排序的方法 // 你可以使用任何排序算法,比如冒泡排序、插入排序、选择排序、快速排序等等 // 在这里,我们使用冒泡排序来对数组进行排序 for (int i = 0; i a[j + 1]) { // 交换元素位置 int temp = a[j];
for (int i = 0; i
for (int j = 0; j
if(a[i]
swap(a,i,j);
}
}
}
return a;
}
private static void swap(int[] a, int i, int j) { //定义一个私有静态函数swap,用于交换数组a中下标为i和j的元素的位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void print(int[] a) { //打印函数 for (int i = 0; i
System.out.println();
for (int i = 0; i
System.out.print(a[i]);
if(i!=a.length-1) { System.out.print(","); }
}
System.out.println();
}
public static void main(String[] args) { //测试方法
int[] a = {90, 12, 21, 32, 51, 78, 87, 98};是一个包含8个整数的数组。
print(sort(a));
System.out.println(binarySearch(sort(a), 40, 0, a.length-1));是一个用来在已排序数组a中二分查找值为40的元素的代码。
}
}
以上是使用递归计算Java中曲线y=x的平方与直线x=1的交点的详细内容。更多信息请关注PHP中文网其他相关文章!