优化功能

时间:2013-12-13 10:22:41

标签: c++ function factorial

我正在使用本书的一部分来学习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表示最大循环数。我将从3开始,因为我理解1和2为num。

“阶乘”(3):factorial(3),然后在阶乘函数3中减去1等于2,然后乘以3得到6的结果。

但是,当程序达到num等于4时,这似乎没有任何意义。因为factorials()函数的int结果应该等于12而不是24。

else result = (factorials (4-1) * 4) ; 

3 * 4 = 12,而不是24.这个程序如何达到24而不是12?然后再次在num = 5上做同样的事情,得到120而不是20。

请帮助我理解,我对这种语言仍然非常高兴,谢谢。 :)

1 个答案:

答案 0 :(得分:4)

  

然后在阶乘函数3中减1等于2,然后乘以3得到6的结果

没有

在阶乘函数中,3“减去1”等于2,然后在递归调用中将此2传递给factorial

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

此调用的结果是对于6的结果乘以3。

这是(factorial(n-1) * n),而不是((n-1) * n)


  

然而,当程序达到num等于4时,这似乎没有任何意义,因为factorials()函数的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混淆了一半。