好的,所以我很难理解这个程序是如何工作的:
#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,我无法弄清楚它是做什么。抱歉问这样一个基本问题,但我真的很难过,我觉得我很想念东西。
答案 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