2013-12-13 94 views
-3

我正在使用這本書的一部分來學習有關優化函數的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在這種語言,謝謝。 :)

+2

要理解遞歸,你首先要了解遞歸;-) –

+0

@Roger約遞歸的第一條規則是,你不談論遞歸。 – 2013-12-13 10:25:32

+0

@remyabel aaaaargh - 我搞砸了我的終止條件...對不起(對不起(對不起(對不起))) –

回答

4

然後在階乘功能3通過1等於2的6

結果在階乘函數中減去,然後乘以3,3「通過1" 等於2中減去,然後該2被傳遞到factorial在遞歸調用:

  • factorial(2) * 3
  • = factorial(1) * 2 * 3
  • = 1 * 2 * 3
  • = 6

此調用的結果是什麼是3的6

結果這(factorial(n-1) * n),不((n-1) * n)相乘。


然而,當程序變得爲num等於4這似乎沒有任何意義了,因爲階乘()的INT結果的函數應該等於12不24

如果factorial(3)是6,那麼factorial(4)顯然不能只有12,因爲那只是兩次6.它不夠長。

  • factorial(3) * 4
  • = factorial(2) * 3 * 4
  • = factorial(1) * 2 * 3 * 4
  • = 1 * 2 * 3 * 4
  • = 24

3 * 4 = 12,不24

正確的,但不是4的階乘。 4因子是1 * 2 * 3 * 4.

我懷疑你有點半迷惑factorialthe fibonacci sequence

+0

再次感謝您輕鬆,在完成此細分之前,我必須專注於清晰地瞭解因子。 :) –

+1

哦,是你! :) –