斐波那契数列:
n=0,f(n)=0,n=1,f(n)=1
f(n) = f(n-1) + f(n-2)
递归解法:
int Fibonacci(int n)
{
if(n <= 1)
{
return n;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
问题:n过大容易导致栈溢出,改为循环
int Fibonacci(int n) {
// 非常容易理解,0,1,2的时候单独处理
if(n <= 0){
return 0;
}
if(n == 1 || n ==2){
return 1;
}
int a = 1;
int b = 1;
int result;
// 然后处理的时候获取到A+B的结果,然后把B赋值给A,结果赋值给B,一步步忘后面移动
for(int i = 3;i<=n;i++){
result = a + b;
a = b;
b = result;
}
return result;
}
青蛙变态跳台阶问题:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳是在前一次跳的结果上累加的,因此我们可以考虑使用递归的方法来解决问题。
那么从递归的三个步骤开始寻找解决方案:
1. 递归截止条件。
由于每次可以跳1-n的任意阶数,因此无论有多少阶,都可以一次跳完,为了表示方便,我们将一次性跳完的情况设为F(0),当n=1时,只能有一种情况,F(1) = 1。当n