了解如何在 C++ 中使用阶乘函数
Understanding how to use the factorial function in c++
我有这段代码可以计算 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 loop" 告诉我们要计算哪些整数的阶乘。
我知道 "else if" 部分告诉我们,如果我们输入一个小于 0 的整数,我们会得到一个错误。
但是我不明白这部分代码。
if ( n > 0) {
do {
result *= n;
--n;
这部分代码的作用是什么?
另外,为什么 n 会递减 --n;
?我有点困惑,因为在我看来,如果 n > 0 并且你通过说 --n 递减,那肯定意味着 n < 0 并且你会因为 else if
而得到一个错误?
do-while
循环是阶乘算法的核心(你知道阶乘是做什么的吗?)。其次,一旦程序进入 if(n > 0)
分支,控制流甚至不会考虑之后进入 else if(n < 0)
。相反,它继续 return result;
.
不过,do-while
完成后,n
不会是负数。它将是 0
.
What does this part of the code do?
也就是实际计算的阶乘值(如4! = 24
)。
Also why is n being decremented --n;?
因为它必须从您要计算阶乘的数字开始下降到零。例如"four factorial"(写作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
因此,无论值是多少,您都需要从 n
递减到 0!
。另请注意,这是一个 递归 定义。
I am a little confused because the way I see it, if n > 0 and you decrement by saying --n, surely that will mean n < 0
错了。 --n
是 shorthand 减一,或 n = n - 1;
。它 不是 意味着 n
的 negation/opposite 或 n = -n;
.
我有这段代码可以计算 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 loop" 告诉我们要计算哪些整数的阶乘。
我知道 "else if" 部分告诉我们,如果我们输入一个小于 0 的整数,我们会得到一个错误。
但是我不明白这部分代码。
if ( n > 0) {
do {
result *= n;
--n;
这部分代码的作用是什么?
另外,为什么 n 会递减 --n;
?我有点困惑,因为在我看来,如果 n > 0 并且你通过说 --n 递减,那肯定意味着 n < 0 并且你会因为 else if
而得到一个错误?
do-while
循环是阶乘算法的核心(你知道阶乘是做什么的吗?)。其次,一旦程序进入 if(n > 0)
分支,控制流甚至不会考虑之后进入 else if(n < 0)
。相反,它继续 return result;
.
不过,do-while
完成后,n
不会是负数。它将是 0
.
What does this part of the code do?
也就是实际计算的阶乘值(如4! = 24
)。
Also why is n being decremented --n;?
因为它必须从您要计算阶乘的数字开始下降到零。例如"four factorial"(写作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
因此,无论值是多少,您都需要从 n
递减到 0!
。另请注意,这是一个 递归 定义。
I am a little confused because the way I see it, if n > 0 and you decrement by saying --n, surely that will mean n < 0
错了。 --n
是 shorthand 减一,或 n = n - 1;
。它 不是 意味着 n
的 negation/opposite 或 n = -n;
.