7)斐波那契数列问题
题目C语言代码:
1 #include<stdio.h> 2 3 int facii(int n) 4 { 5 int a[]={0,1}; 6 int i=0,x1=0,x2=1,x3=0; 7 8 if(n<2) 9 return a[n]; 10 11 for(i=2;i<=n;i++) 12 { 13 x3=x1+x2; 14 x1=x2; 15 x2=x3; 16 } 17 return x3; 18 } 19 20 int main() 21 { 22 int n,y; 23 scanf("%d",&n); 24 y=facii(n); 25 printf("%d\n",y); 26 }
没有用递归,就是
f(1)=1;
f(2)=1;
f(i)=f(i-1)+f(i-2);
f(i-2)=f(i-1);
f(i-1)=f(i);
就是一个替换,f(i-1)和f(i-2) f(i)移动
然后递归方法:
1 class Solution { 2 public: 3 int Fibonacci(int n) { 4 int f=0,g=1; 5 if(n==0) 6 return 0; 7 if(n==1) 8 return 1; 9 while(--n){ 10 g+=f; 11 f=g-f; 12 } 13 return g; 14 } 15 };