【C语言实现求斐波那契数列的第n位】

简介: 【C语言实现求斐波那契数列的第n位】

斐波那契数列------从第三项开始,每一项都等于前两项之和;而第一项和第二项都是1

1.非递归方法实现

主函数部分,定义变量,初始化变量,输入想求斐波那契数列的第n位 n

int main()
  {
    int n, c, i;
    n = c = i = 0;
    printf("请输入:\n");                
    scanf("%d", &n);
    int a = 1;
    int b = 1;

将a和b初始化成1,即为斐波那契数列的第一位和第二位,然后将a+b赋给c,即为从第三项开始,每一项都等于前两项之和;每次相加完赋值之后,将b的值赋给a,c的值赋给b,迭代下去;从第二位斐波那契数开始,每迭代一次就能得到下一位的斐波那契数,所以想求第n位的斐波那契数,就应该迭代n-2次.

1 1 2 3 5 8 13 21 34 55 …

a b c

if (n > 2)
    {
      for (i = 0; i < n - 2; i++)
      {
        c = a + b;                                               
        a = b;                                                     
        b = c;
      }
      printf("%d\n", c);
    }
    else
      printf("%d\n", a);
    return 0;
  }

使用非递归的方法计算斐波那契数列的第n位,效率会快很多,但当数值过大时无法计算出准确值.

2. 递归方法实现

当n>2时,使用递归返回斐波那契数的前一位和前两位的和;当n<=2返回1.

int Fib(int n)
  {
    if (n > 2)
      return Fib(n - 1) + Fib(n - 2);           
    else
      return 1;
  }
  int main()
  {
    int n = 0;
    printf("请输入:\n");
    scanf("%d", &n);
    int ret = Fib(n);
    printf("ret = %d\n",ret);
    return 0;
  }

当使用递归算斐波那契数列的第n位时,n较大时,计算量非常大,效率低,会算得慢.

目录
相关文章
|
算法 C语言
斐波那契数列C语言版划重点,小白必看
斐波那契数列C语言版划重点,小白必看
|
存储 C语言
C语言输出斐波那契数列
C语言输出斐波那契数列
193 0
|
10月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
542 16
|
算法 C语言
【C语言】斐波那契数列细讲
【C语言】斐波那契数列细讲
186 1
|
存储 C语言
C语言实现斐波那契数列
C语言实现斐波那契数列
292 0
|
机器学习/深度学习 C语言
斐波那契数列(用c语言探索黄金分割之美)
斐波那契数列(用c语言探索黄金分割之美)
207 0
|
算法 搜索推荐 程序员
C语言第三十一练——递归求解n位斐波那契数列
C语言第三十一练——递归求解n位斐波那契数列
116 0
C语言二十三弹---求第N项斐波那契数列的值
C语言二十三弹---求第N项斐波那契数列的值
|
C语言
C 语言实例 - 斐波那契数列
C 语言实例 - 斐波那契数列。
173 0
|
C语言
斐波那契数列【C语言实现】
斐波那契数列【C语言实现】
429 4