1.问题描述
题目:一只青蛙一次可以跳 1 阶台阶,也可以跳2 阶。求该青蛙跳上一个n 级的台阶总共有多少种跳法?
2.算法分析:
(1)n=1 跳法:1种
(2)n=2 跳法:2种
(3)n=3 跳法:3种
(4)n=4 跳法:5种
(5)n=5 跳法:8种
由数学归纳法分析可得:
(6)n=n 跳法:Jump(n - 1) + Jump(n - 2) 这里想到递归思想
类比于斐波那契数列1 1 2 3 8 13 21 34 55
3.算法实现
#include<stdio.h>
//类比于斐波那契数列1 1 2 3 8 13 21 34 55
//1 2 3 5 8 13 21 34 55
//循环方式
int Jump2(int n)
{
int a = 1;
int b = 2;
int c = n;
while (n>2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
//递归方式 速度慢 求的过大时可能存在栈溢出--stack overflow
int Jump1(int n)
{
if (n <= 2)
{
return n;
}
else
{
return Jump1(n - 1) + Jump1(n - 2);
}
}
int main()
{
int n = 0;
int ret = 0;
printf("请输入台阶数:");
scanf_s("%d", &n);
ret = Jump1(n);
printf("递归法:有%d种跳法\n", ret);
ret = Jump2(n);
printf("循环法:有%d种跳法\n", ret);
return 0;
}