我有这个代码可以计算0到9之间所有整数的阶乘。
#include <iostream>
using namespace std;
int factorial(int n)
{
int result = 1;
if ( n > 0) {
do {
result *= n;
--n;
} while (n > 1);
}
else if ( n < 0) {
cout << "Error in argument \targument = " <<
n << "\n";
}
return result;
}
int main()
{
for (int i=0 ; i < 10; ++i)
cout << i << "! = "<< factorial(i) << "\n";
return 0;
}
我理解int main
部分中的“for循环”告诉我们哪些整数可以计算出阶乘。
我理解“else if”部分告诉我们如果输入一个小于0的整数,我们会得到一个错误。
但是我不明白这部分代码。
if ( n > 0) {
do {
result *= n;
--n;
这部分代码有什么作用?
为什么n会递减--n;
?我有点困惑,因为我看到它的方式,如果n&gt; 0,你减去说--n,肯定会意味着n&lt; 0,因为else if
你只会收到错误?
答案 0 :(得分:2)
这段代码的作用是什么?
这是因子值的实际计算(例如4! = 24
)。
为什么n被递减--n;?
因为它必须从你想要计算的阶乘数减去零。例如,“四个因子”(书面4!
)表示:
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1 * 0!
0! = 1 (by definition)
1! = 1 * 1
2! = 2 * 1 * 1
3! = 3 * 2 * 1 * 1
4! = 4 * 3 * 2 * 1 * 1
= 24
因此,无论价值如何,您都需要从0!
向下递减到n
。另请注意,这是递归定义。
我有点困惑,因为我看到它的方式,如果n&gt; 0,你减去说--n,肯定会意味着n&lt; 0
错误。 --n
是减去一个或n = n - 1;
的简写。 不意味着否定/ n
或n = -n;
的反对。
答案 1 :(得分:0)
do-while
循环是因子算法的实质内容(你知道什么是因子吗?)。其次,一旦程序进入if(n > 0)
分支,控制流程甚至不会考虑在此之后输入else if(n < 0)
。相反,它继续return result;
。
然而,n
完成后do-while
不会为负数。它将是0
。