对递归的相关应用:
斐波那契数列
用for语句实现:
public static int fib(int n) {
int a = 1, b = 1, c = 1;
for (int i = 3; i <= n; ++i) {
c = a + b;
b = a;
a = c;
}
return c;
}
用递归实现:
public static int fib(int n){
if (n<2) return 1;
else return fib(n-1)+fib(n-2);
}
但是你会发现用递归实现的时间复杂度特别高,为O(2^n),因为我们每次返回时,要计算fib(n-1)和fib(n-2)。
因此我们需要采用一种只返回一次的操作来减少时间复杂度:
public static int fib(int n,int a,int b){
if (n<2)
return a;
else return fib(n-1, a+b, a);
}
public static int fib1(int n){
int a=1,b=1;
return fib(n, a, b);
}
这样只调用了一个递归,时间复杂度减少很明显。