【发布时间】:2014-06-03 15:16:00
【问题描述】:
好的,所以我很难理解这个程序是如何工作的:
#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,我无法弄清楚它会做什么。很抱歉提出这样一个基本问题,但我真的被这个难住了,我觉得我错过了东西。
【问题讨论】:
-
这称为递归。只需查看相关问题或谷歌即可。
-
对,我以前见过并使用过递归,但是这个......我不明白“return getFibNumber(fibIndex - 1) + getFibNumber(fibIndex - 2);”是什么确实如此,因为您似乎可以只执行“return (fibIndex - 1) + (fibIndex - 2);”
-
@JTadeo28 这与再次调用该函数不同,两次。这个想法是它最终只返回 fibIndex,将其与其他函数调用的结果相加并最终返回。
-
@JTadeo28 - 最好的学习方法是用你认为正确的方式实际运行程序,看看你得到了什么(或者更好的是——调试它,看看你在每一步中得到了什么)。这将花费更少的时间,并且比阅读解释更有用。此外,互联网和SO充满了这个问题的例子和解释。
-
另一种好方法是拿一张纸,画出
getFibNumber(5)左右发生的情况的图表。与在调试器中单步调试相比,创建该图可以帮助您更好地“查看”它。