题目描述;2016.8.19修改
一个台阶总共有n阶,如果一次可以跳1阶,也可以跳2姐,求总共有多少种跳法.
思路:
把n阶台阶的跳数记作f(n),当 你n >2时,如果第一次直跳1级,则后面剩下的n-1阶的跳数为f(n-1),如果第一次跳2阶,后面剩下的n-2阶台阶的跳数为f(n-2).f(n) = f(n-1)+f(n-2).斐波那契数列!!!!
代码:
-
#include<stdio.h>
-
#include<stdlib.h>
-
int f(int n)
-
{
-
if (n == 0)
-
return 0;
-
if (n == 1)
-
return 1;
-
if (n == 2)
-
return 2;
-
return f(n-1)+f(n-2);
-
}
-
int main()
-
{
-
int result = f(4);
-
printf("%d",result);
-
return 0;
-
}
但是如果一个人可以一次跳1个,2个,或者3个时
公式如下:
f(n) =1;n=1
2;n=2
3;n=3
f(n-1)+f(n-2)+f(n-3),n>3
非递归写法c代码:
-
#include
using namespace std;
long long skip(unsigned int n)
{
int f[3] = {1,2};
if (n == 0)
return 0;
if (n <= 2)
return f[n-1];
for (int i = 3;i <= n;i++)
{
f[2] = f[1]+f[0];
f[0] = f[1];
f[1] = f[3];
}
return f[3];
}
int main()
{
cout << skip(2)<< endl;
return 0;
}
阅读(632) | 评论(0) | 转发(0) |