令人困惑的斐波那契数程序

Confusing Fibonacci number program

本文关键字:程序      更新时间:2023-10-16

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

#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,我不知道该怎么办。很抱歉问这么一个基本的问题,但我真的被这个问题难住了,我觉得我错过了什么。

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

为了了解这个程序是如何工作的,我制作了一个递归树,初始fibIndex5

           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

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