我正在使用本书的一部分来学习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。
请帮助我理解,我对这种语言仍然非常高兴,谢谢。 :)
答案 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.
我怀疑你factorial与the fibonacci sequence混淆了一半。