在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普通写法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);//其余位为其前两位相加 } }
#includeint 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; }



