令人困惑的斐波纳契数字计划

时间:2014-04-19 03:40:12

标签: c++ recursion fibonacci

好的,所以我很难理解这个程序是如何工作的:

#include <iostream>
using namespace std;

int getFibNumber(int fibIndex)
{
    if(fibIndex < 2)
        return fibIndex;
    else
        return getFibNumber(fibIndex - 1) + getFibNumber(fibIndex - 2);
}

int main(int argc, char** argv)
{
    cout << "Enter 0-based index of desired Fibonacci number: ";
    int index = 0;
    cin >> index;

    cout << "Fibonacci number is: " << getFibNumber(index) << endl;

    return 0;
}

具体来说,“getFibNumber(...)”重复时会做什么(如果这是正确的单词)?如果传入的整数“fibIndex”大于或等于2,我无法弄清楚它是做什么。抱歉问这样一个基本问题,但我真的很难过,我觉得我很想念东西。

2 个答案:

答案 0 :(得分:2)

这称为递归。它不是通过循环执行此操作,而是再次调用该函数,但使用不同的参数。最终,基本条件为true,函数将返回,导致其余的调用也返回。在适当的情况下,这可以是一个非常强大的工具。

答案 1 :(得分:2)

正如大家在这里提到的,这基本上是递归。

为了了解这个程序的工作原理,我将初始fibIndex的递归树设为5

           5                   5 calls 4 and 3.
       /      \                
      4        3               4 calls 3 and 2. 3 calls 2 and 1.
    /   \     /  \
   3     2    2   1            1 is base case, returns 1.
  / \   / \  / \  
 2   1 1  0 1  0               2 is not base case. So calls 1 and 0.
/ \
1  0