day16 递归
1.递归特点
- 理解:自己调用自己的方法,但是不能无限制的调用,在合适的时候又要一层层跳出自己方法最后跳出。在使用递归时,我觉得不能把问题考虑的太细,不然会陷入这个循环中把自己给绕晕,既然每个子问题规律一样,只需要知道他们规律,剩下交给计算机处理。在递归过程中,一定要保证有跳出递归的条件还有就是递归函数不一定效率就很高,如会受递归的深度、递归函数的实现方式等影响。当递归深度较大时,可能会导致堆栈溢出,从而影响程序的性能。
2.代码
- 递归实现1到n的和
如果n小于0,则返回0作为结果。
如果n大于0,则递归调用函数,并返回n加上递归调用函数的结果。
- 斐波那契数列
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (n >= 2)
package datastructure.stack;
public class Recursion {
public static int sumToN(int paraN){
if (paraN<0){
return 0;
}
return sumToN(paraN-1) + paraN;
}
public static int fibonacci(int paraN){
if (paraN <= 0){
return 0;
}else if(paraN == 1){
return 1;
}
return fibonacci(paraN-1) + fibonacci(paraN-2);
}
public static void main(String[] args) {
int tempValue = 5;
System.out.println("0 sum to " + tempValue + " = " + sumToN(tempValue));
tempValue = -1;
System.out.println("0 sum to " + tempValue + " = " + sumToN(tempValue));
for(int i = 0; i < 10; i ++) {
System.out.println("Fibonacci " + i + ": " + fibonacci(i));
}
}
}
