一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2)。不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位。
程序:
#include<stdio.h>
int fibonacci(int n)
{
int num1 = 1, num2 = 1, num3 = 0, i = 0;
if (n <= 1)
{
return num1;
}
for (i = 1; i < n; i++)
{
num3 = num1 + num2;
num1 = num2;
num2 = num3;
}
return num3;
}
int main()
{
int num = 0, ret = 0;
printf("请输入台阶数:");
scanf("%d", &num);
ret = fibonacci(num);
printf("总共有%d种跳法!\n",ret);
return 0;
}
结果:
请输入台阶数:3
总共有3种跳法!
请按任意键继续. . .
拓展: 一只青蛙一次可以跳上1级台阶,也可以跳上2级,......它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
解:我们可以用数学归纳法求得共有f(n)=2^(n-1)种跳法
程序:
#include<stdio.h>
#include<math.h>
int fibonacci(int n)
{
return pow(2,n-1);
}
int main()
{
int num = 0, ret = 0;
printf("请输入台阶数:");
scanf("%d", &num);
ret = fibonacci(num);
printf("总共有%d种跳法!\n",ret);
return 0;
}
结果:
请输入台阶数:3
总共有4种跳法!
请按任意键继续. . .