题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
#include <stdio.h>
// 每一次跳跃有两种选择,跳一个台阶,或跳两个台阶,不同的方式后面的跳跃就是不同的跳法
// f(n) = f(n-1) + f(n-2),以此类推
int jumpFloor1(int step, int n)
{
if (step > n) {
return 0;
}
else if (step == n) {
return 1;
}
else {
return jumpFloor1(step + 1, n) + jumpFloor1(step + 2, n);
}
}
// 斐波那契指的是0, 1, 1, 2, 3,
// 5, 8...,从第3个数开始,每个数的值都等于前两个数之和
int jumpFloor2(int n)
{
if (n == 1) {
return 1;
}
int first = 1;
int second = 2;
int third = 0;
for (int i = 3; i <= n; ++i) {
third = first + second;
first = second;
second = third;
}
return second;
}
void test7(int n)
{
int jump1 = jumpFloor1(0, n);
int jump2 = jumpFloor2(n);
printf("total steps jump1: %d, jump2: %d\n", jump1, jump2);
}
参考 这里