c - 递归调用流程解释?

标签 c recursion fibonacci

#include <stdio.h>

int fibonaci(int i)
{
   if(i == 0)
   {
      return 0;
   }
   if(i == 1)
   {
      return 1;
   }
   return fibonaci(i-1) + fibonaci(i-2);
}



int  main()
{
    int i;
    for (i = 0; i < 10; i++)
    {
       printf("%d\t", fibonaci(i));
    }
    return 0;
}

我读到这个函数表示一个二叉树。为什么会这样?我浏览了所有相关答案,但都未能提供适当的解释。任何有关递归的帮助文档将不胜感激。如果可能的话,给我一些超链接。我会对我非常有帮助。

最佳答案

调用自身的函数称为 recursive function而调用函数本身的过程称为recursion在C编程中。这里是fibonaci(i)称为 10次。

fibonacci series是这样的:1, 1, 2, 3, 5, 8, 13, 21, 34

从 0 和 1 开始,系列中的每个新数字都是之前两个数字的总和。

if(i == 0)
   {
      return 0;
   }
   if(i == 1)
   {
      return 1;  //returns 1 if i=1
   }
   return fibonaci(i-1) + fibonaci(i-2);  // if it is 2 or greater than 2

mathematical terms ,斐波那契数列Fn由递推关系定义

  F_n = F_{n-1} + F_{n-2}

带有种子值

 F_0 = 0 \quad\text{and}\quad F_1 = 1.

编写一个返回 F_n 的函数 int fib(int n)。例如,如果 n = 0,则 fib() 应返回 0。如果 n = 1,则应返回 1。如果 n > 1,则应返回 F_{n-1} + F_{n-2}

关于c - 递归调用流程解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836244/

相关文章:

c++ - 斐波那契数列,二分查找

比较 C 中具有任意位数的两个值

java - 请解释为什么我的代码导致堆栈溢出错误

c - 程序不返回 0。它有效但返回一个非常大的负数

c++ - N的被加数的不同组合

c - C 递归组合 (nCr) 中的段错误

go - 斐波那契负数

javascript - 尾递归和斐波那契

c - 在线编译时代码块出错并显示段错误?

c - 使用 fopen 的 C 语言中的内存泄漏