问题介绍
在n个台阶前,有一只青蛙,青蛙一次可以跳上1个或者两个台阶,问跳上n个台阶有几种跳法?
问题分析
假设只有两级台阶
只有一种跳法:1->2
假设有三级台阶
有两种跳法:1->2->3 ; 1->3
假设有四级台阶
有三种跳法:1->2->3->4 ; 1->3->4 ; 1->2->4
假设有五级台阶
有三种跳法:1->2->3->4->5 ; 1->3->4->5 ; 1->2->4->5 ; 1->2->3->5 ; 1->3->5
....................
....................
通过列举分析,我们可以看出,跳上台阶的方法数和斐波那契数列吻合(除一、二位是1外,其余位都是它的前两位数相加)
代码实现
递归写法
#include <stdio.h>
int move(int num);
int main()
{
int num = 0;
printf("要跳多少个台阶?\n");
scanf("%d", &num);
printf("有%d种跳法\n", move(num));
return 0;
}
int move(int num)
{
if (num < 3)//一、二默认为1
{
return 1;
}
else
{
return move(num - 1) + move(num - 2);//其余位为其前两位相加
}
}
普通写法
#include <stdio.h>
int f(int input);
int main()
{
printf("要跳多少个台阶?");
int input = 0;
scanf("%d", &input);
printf("有%d种跳法\n", f(input));
return 0;
}
int f(int input)
{
int a = 1;
int b = 1;
int c = 1;
while (input > 2)
{
c = a + b;
a = b;
b = c;
input--;
}
return c;
}