递归和循环实现斐波那契数(函数)

递归和循环实现斐波那契数

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

1, 1 , 2 , 3 , 5 , 8 , 13, 21, 34,… …
第n项等于前两项和。

循环实现

函数实现:

int fib1(int n) {
    
    
   if (n == 1) {
    
    //斐波那契数第一项为1,特殊情况先举例更简单
      return 1;
   }
   if (n == 2) {
    
    //斐波那契数第二项也是1
         return 1;
   }
 // 这俩变量分别表示第 i - 1 项和第 i - 2 项
int last1 = 1;
int last2 = 1;
int cur = 0;	
for (int i = 3; i <= n; i++) {
    
    //i从第三项开始
cur = last1 + last2;
last2 = last1;
last1 = cur;//依次循环赋值实现一直求和
   }
   return cur;
}

主函数实现:

int main()
{
    
    
   int n = 0;
   printf("输入要求的斐波那契数:\n");
   scanf("%d", &n);
   printf("%d", fib1(n));
   return 0;
}

在这里插入图片描述

递归函数实现

函数实现:

int fib2(int n) {
    
    
      if (n == 1) {
    
    //斐波那契数第一项为1,特殊情况先举例更简单
         return 1;
      }
      if (n == 2) {
    
    //斐波那契数第二项也是1
         return 1;
      }
      return fib2(n - 1) + fib2(n - 2);//前一项和加后一项和
   }

主函数实现:

int main()
{
    
    
   int n = 0;
   printf("输入要求的斐波那契数:\n");
   scanf("%d", &n);
   printf("%d", fib2(n));
   return 0;
}

在这里插入图片描述注意:当数字很大的时候,递归实现的时间要远大于循环,是因为递归的实现冗余度非常大,做了很多重复计算。类似于二叉树的样子
在这里插入图片描述每增加一个数字会带来很多很多的重复计算。

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/109337317