我正在使用這本書的一部分來學習有關優化函數的C++。優化功能
的代碼如下:
#include <iostream>
using namespace std;
int computeFactorials(int, int);
int factorial(int);
int main() {
computeFactorials(1, 5);
return 0;
}
int computeFactorials(int num, int max) {
cout << "Factorial of " << num << ": ";
cout << factorial(num) << endl;
num++;
if(num > max)
return 0;
else
computeFactorials(num, max);
}
int factorial(int n) {
int result;
if (n == 1)
result = 1;
else
result = (factorial(n-1) * n);
return result;
}
下面是程序執行:
Factorial of 10: 3628800
C:\MyPrograms\c++ optimize.cpp -o optimize.exe
C:\MyPrograms>optimize
Factorial of 1: 1
Factorial of 2: 2
Factorial of 3: 6
Factorial of 4: 24
Factorial of 5: 120
我能跟進爲num = = 3,但是當它到達4我的邏輯沒有按」加上結果。我讀這樣的代碼:
computeFactorials(1,5)
,1表示數字開始於,5表示循環的最大數量。因爲我將1和2理解爲num,所以我將從3開始。
(3)「的階乘」:factorial(3)
,然後在階乘功能3通過1等於2的6
然而,當程序得到爲num結果中減去,然後乘以3等於4這似乎沒有任何意義了。因爲階乘的整型結果()函數應等於12不24.
else result = (factorials (4-1) * 4) ;
3 * 4 = 12,不24.該程序如何獲得至24和12不?然後再次在num = 5上做同樣的事情,得到120而不是20.
請幫助我理解,我仍然非常nooby在這種語言,謝謝。 :)
要理解遞歸,你首先要了解遞歸;-) –
@Roger約遞歸的第一條規則是,你不談論遞歸。 – 2013-12-13 10:25:32
@remyabel aaaaargh - 我搞砸了我的終止條件...對不起(對不起(對不起(對不起))) –