青蛙跳台阶问题:假设一只青蛙一次可以跳上一级台阶,一次也可以跳上两级台阶。求一只青蛙跳上一个n级的台阶,有多少种跳法?
分析:
当 n = 1: 有1种跳法;
当 n = 2: 有2种跳法;
当 n = 3: 有3种跳法;
当 n = 4: 有5种跳法;
当 n = 5: 有8种跳法;
可以看出跳法的次数是一个斐波那契数列:
下面为实现代码:
第一种方法:(递归,效率低)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fb_list(int n)
{
if (n == 1)
{
return 1;
}
else if (n == 2)
{
return 2;
}
else
{
return Fb_list(n-1)+ Fb_list(n - 2);
}
}
int main()
{
int n = 5;
int ret = Fb_list(n);
printf("%d\n", ret);
system("pause");
return 0;
}
第二种方法:(效率高)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int fib(int n)
{
int f1 = 1;
int f2 = 1;
int f3 = 1;
while (n--)
{
f1 = f2;
f2 = f3;
f3 = f1 + f2;
}
return f1;
}
int main()
{
int ret = fib(5);
printf("%d\n", ret);
system("pause");
return 0;
}