转自:https://blog.youkuaiyun.com/snow_7/article/details/51669925
f(n) = f(n-1) + f(n-2), f(0) = f(1) = 1
兔子繁殖问题和青蛙跳台阶问题背后的数学模型也是斐波那契数列。
public int f(int n){
if(n < 0){
return -1;
}
if(n == 0 || n == 1){
return 1;
}
return f(n - 1) + f(n - 2);
}
青蛙跳台阶
一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
问题一
分析:当n=1,有一种跳法
当n=2,一次跳一个跳两次,一次跳两个跳一次,共两种跳法
当n>=2时,n个台阶,设有F(n)种跳法
(1)若第一次选择跳1个台阶,那么剩下的n-1个台阶有F(n-1)种跳法
(2)若第一次选中跳2个台阶,那么剩下的n-2个台阶有F(n-2)种跳法
所以当有n个台阶时 F(n) = F(n-1)+F(n-2)种跳法。
解法一:递归
public int jumpSteps(int n){
if(n <= 0){
return 0;
}
if(n == 1 || n == 2){
return n;
}else{
return jumpSteps(n - 1) + jumpSteps(n - 2);
}
}解法二:迭代
public int jumpSteps2(int n){
if(n <= 0){
return 0;
}
int first = 1, second = 2, result = 0;
if(n == 1 || n == 2){
return n;
}else{
for(int i = 3; i <= n; i++){
result = first + second;
first = second;
second = result;
}
return result;
}
}

本文详细解析了青蛙跳台阶问题的两种解决方案:递归法和迭代法,并揭示了该问题与斐波那契数列之间的联系。
1788

被折叠的 条评论
为什么被折叠?



