有人可以帮我理解为什么这段代码不能正常工作?我知道它非常接近,我认为我只是忽略了一些东西。任何帮助表示赞赏。以下是我到目前为止的情况:
#include <iostream>
#define TEST_ARRAY_SIZE 4
long int factorial(int num);
long int factorial(int num){
for(unsigned int i = 1; i <= num; i++) {
num *= i;
}
return num;
}
int main() {
int test[TEST_ARRAY_SIZE] = {1, 2, 5, 7};
for (unsigned int i = 0; i < TEST_ARRAY_SIZE; i++) {
std::cout << "Factorial of " << test[i] << " is " << factorial(test[i]) << std::endl;
}
return 0;
}
答案 0 :(得分:1)
您应该将return num;
移到循环之外。就像现在一样,控制总是在第一个数字相乘后返回。
- 正确的代码 -
long int factorial(int num){
long int res = 1;
for(unsigned int i = 1; i <= num; i++) {
res *= i;
}
return res;
}
答案 1 :(得分:1)
阶乘函数的主体不正确。您可以使用递归方法计算特定数字的阶乘。您的版本的更正程序如下:
#include <iostream>
#define TEST_ARRAY_SIZE 4
long int factorial(int num);
int main() {
int test[TEST_ARRAY_SIZE] = {1, 2, 5, 7};
for (unsigned int i = 0; i < TEST_ARRAY_SIZE; i++) {
std::cout << "Factorial of " << test[i] << " is " << factorial(test[i]) << std::endl;
}
return 0;
}
long int factorial(int num){
if (num == 1)
return num;
else
return num * factorial(num-1);
}
答案 2 :(得分:0)
这只是问题的一部分;这是一个适当的缩进会使虫子瞬间变得明显的情况。
除此之外,你为什么在循环中使用num?你应该保持原样并声明一个新的变量来复合并返回结果。
long int factorial(unsigned int num) {
int x = 1;
for(unsigned int i = 1; i <= num; i++) {
x *= i;
}
return x;
}
其他注意事项: