本帖最后由 王子鹏 于 2016-5-29 11:03 编辑
首先 数学分析: 如果有一层 方法有一种 两层 2种
三层 3中
四层 5种
五层 8中
看出逻辑了吗
代码编辑:
递归实现:
public int JumpFloor(int n) //一共要跳的层数
{
if (n < 0)
return 0;
int[] fibArry = { 0, 1, 2 };
//如果层数小于3
if (n < 3)
return fibArry[n];
//层数大于3 时 都是上一层的数加上上一层
return JumpFloor(n - 1) + JumpFloor(n - 2);
}
非递归实现:
public int JumpFloor(int n)
{
//如果层数小于3
if (n < 0)
return 0;
int[] fibArry = { 0, 1,2 }; //数组角标分别是 0 1 2 而楼层不会是0 所以有个0
if (n < 3)
return fibArry[n];
long count = 0; //总共的方法
long fibFirst=1;
long fibTwo=2;
for (int i = 3; i <= n; i++) //开始循环
{
count = fibFirst + fibTwo; // 将一层的方法加上2层的方法数之和 等于第三层的方法数和
fibFirst=fibTwo ; // 将第二层的赋值给第一层 作为下次的第一层
fibTwo = count; // 将第三层的赋值给第二层 作为下次的第二层
}
return count ;
}
希望能帮到你 共同学习 加油!
|