问题:一只青蛙一次可跳一个台阶,一次也可跳两个台阶,问这只青蛙跳上n个台阶有多少种跳法。
分析:根据n的数量我们可以分析出对应的跳法数量,如下:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ... | n-1 | n |
num | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | num(n-3)+num(n-2) | num(n-2)+num(n-1) |
//递归方式实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int step_jumping(int x)
{
if (x <= 2)
{
return x;
}
else
{
return step_jumping(x - 1) + step_jumping(x - 2);
}
}
int main()
{
int n = 0;
int num = 0;
printf("请输入台阶的数量:");
scanf("%d", &n);
num = step_jumping(n);
printf("%d\n", num);
return 0;
} /*输出结果为:请输入台阶的数量:8
34*/
//非递归方式实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int step_jumping(int x)
{
if (x <= 2)
{
return x;
}
else
{
int a = 1;
int b = 2;
int c = 0;
while (x>2)
{
c = a + b;
a = b;
b = c;
x--;
}
return c;
}
}
int main()
{
int n = 0;
int num = 0;
printf("请输入台阶的数量:");
scanf("%d", &n);
num = step_jumping(n);
printf("%d\n", num);
return 0;
} /*输出结果为:请输入台阶的数量:8
34*/