递归和非递归分别实现求第n个斐波那契数

简介: 递归和非递归分别实现求第n个斐波那契数

斐波那契数列



1        1        2        3        5        8        13        21        34        55       ........

从第3项起,前两项和等于后一项。


代码实现(用递归):



#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int rec(int n)
{
  if (n <= 2)
    return 1;
  else
    return  (rec(n - 2) + rec(n - 1));
}
int main()
{
  int n = 0;
  scanf("%d",&n);
  int k =rec(n);
  printf("%d\n",k);
  return 0;
}


代码实现(非递归):



#include <stdio.h>
int rec(int n)
{
  int a = 1;
  int b = 1;
  int sum = 0;
  if (n <= 2)
    return 1;
  if (n > 2) 
  {
    int i = 1;
    while (i <= (n - 2))
    {
      sum = a + b;
      a = b;
      b = sum;
      ++i;
    }
    return sum;
  }
}
int main()
{
  int n = 0; 
  scanf("%d",&n);
  int m =rec(n);
  printf("%d\n",m);
  return 0;
}


代码讲解:



b48923d80ff94286b8f6d6715191b068.png


图文讲解:


1380894c642449f6acff0df62b308f89.png


运行结果:




9293baa82c23414a81085ed171d543c4.png



目录
相关文章
|
5月前
|
算法 C++
C++快速幂(递归)
C++快速幂(递归)
|
26天前
递归阶乘详解
递归阶乘详解
11 1
|
3月前
|
C语言
递归求阶乘
【1月更文挑战第18天】C语言实例——递归求阶乘。
22 1
|
10月前
|
机器学习/深度学习 存储 设计模式
从斐波那契数列到递归
大家好,我是王有志。今天我们要通过经典数学问【题斐波那契数列】来学习非常重要的编程技巧:递归。
88 1
从斐波那契数列到递归
|
11月前
|
机器学习/深度学习
求n的阶乘(递归法和循环法
根据阶乘的计算方法:n!= 1 * 2 * 3*…*n,我们在一个for循环完成 n 次乘法运算。注意因为是连乘,最终阶乘结果可能会非常大所以我们在Fac函数中用 long long 类型的变量来记录阶乘的结果。
字符串逆序(递归和非递归实现)
给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。 交换两个指针位置上的字符
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
179 1
汉诺塔(递归+ 非递归版)
|
机器学习/深度学习 人工智能 算法
『递归』汉诺塔和全排列
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下: 第1步:1号盘从A柱移至B柱第2步:2号盘从A柱移至C柱
166 0
|
机器学习/深度学习
用递归和非递归实现斐波那契数列
用递归和非递归实现斐波那契数列
151 0
用递归和非递归实现斐波那契数列