递归算法
定义:递归算法就是在当前的函数中直接或间接的调用自己并传给相应的参数的算法。
递归函数的特点
(1)函数要直接或间接调用自身。
(2)要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。
(3)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
1、使用递归算法求解斐波那契数列
Fibonacci数列
即斐波那契数列,用数学公式表示出来就是:
F(0)=0,
F(1)=1,
F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
/**
* 使用递归算法求解斐波那契数列
*/
private static int recursion(int n) {
{// 使用递归
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return recursion(n - 1) + recursion(n - 2);
}
}
}
2、使用递归算法求n!
算法:使用递归公式f(n) = n*f(n-1)求n!。
private static int fn(int n) {
if (n<0) {
throw new RuntimeException("数字非法");
}
int sum = 0;
if (n == 0 || n==1) {
return 1;
}else if(n>1){
sum = n*fn(n-1);
}
return sum;
}
当然求n!还可以使用累积法:
int s=1;
for(int x=1; x<=n; x++){
s = s*x;
}
3、使用递归算法实现求职1+1/2+1/3+...+1/n
算法:使用递归公式f(n) = 1/n + f(n-1)。
private static float getSum(int n) {
if (n < 1) {
throw new RuntimeException("数字非法");
}
float sum = 0;
if (n == 1) {
return 1;
} else if (n > 1) {
sum = (float) (1.0 / n) + getSum(n - 1);
}
return sum;
}