记忆性递归

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

1.普通斐波那契数列解法

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 int Fibonacci(int n)
 6 {
 7     if(n==1||n==2)
 8         return 1;
 9     else
10         return Fibonacci(n-1)+Fibonacci(n-2);
11 }
12 
13 int main()
14 {
15     for(int i=1;i<100;i++)
16     {
17         printf("%d ",Fibonacci(i));
18     }
19     printf("\n");
20     return 0;
21 }

 

2.记忆性递归   用一个数组保存求得的结果  适用于数据项比较大的情况

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 int f[100];
 6 
 7 int Fibonacci(int n)
 8 {
 9     if(n==1||n==2)
10         return f[n]=1;
11     else
12     {
13         if(f[n]==0)  //没求解过
14             return f[n]=Fibonacci(n-1)+Fibonacci(n-2);
15         else   //求解过,直接取保存的结果值
16             return f[n];
17     }
18 }
19 
20 int main()
21 {
22     printf("%d\n",Fibonacci(1000)); //求第1000项结果 非常快
23     return 0;
24 }

 

posted @ 2019-04-17 12:02  北风吹沙  阅读(743)  评论(0编辑  收藏  举报