注意:封面上美丽可爱的女生是我全世界最最最好的朋友 她是我永远的嫡长闺 |
形如1 1 2 3 5 8 13 21 34...叫斐波那契数列
即前两项之和为第三项
一般思路:n<=2时 fib(n)=1
n>2时 fib(n)=fib(n-1)+fib(n-2)
#include<stdio.h>
int fib(n)
{
if(n<=2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=fib(n);
printf("ret = %d\n",ret);
return 0;
}
缺点:效率太低当n=50时大概需要运行10min
原因:逆着运算 当n=10时得先求n=9 以此类推 进行了许多次无效重复运算
优化思路:正向运算 利用赋值
#include<stdio.h>
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while(n>=2)
{
c = a+b;
a = b;
b = c;
n--;
}
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=fib(n);
printf("ret = %d\n",ret);
return 0;
}
j经典题目:1.汉诺塔问题
2.青蛙跳台阶问题