我写了这个程序:
#include <stdio.h>
/*Part B
Write a program that:
defines an array of 10 ints
assigns factorial(x) to array element x, for x in the range 0 through 9, inclusive
copies those array elements into a second array of 10 ints, but in reverse order (i.e., element 0 is factorial(9), element 1 is factorial(8), and so on)
prints out that second array to the terminal*/
int factorial(int n){
int factorial = 1;
while(n>1){
factorial = n*factorial;
}
return factorial;
}
int main(int argc, char **argv){
int arr1[10];
int arr2[10];
int i = 0;
for(i = 0; i<10; i++){
printf("%d", i);
arr1[i] = factorial(i);
}
for(i = 9; i>=0; i--){
arr2[i] = arr1[9-i];
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
但是当我跑它时它只是坐在那里。我认为这与对factorial的调用有关,因为当我评论它时它立即起作用,但是当它进入时,它甚至没有进入第一个printf。
我做错了什么?
答案 0 :(得分:6)
while(n > 1){
factorial = n*factorial;
}
你错过了n--
;
答案 1 :(得分:3)
你的while循环:
while(n>1){
factorial = n*factorial;
}
将永远奔跑。该循环中没有任何内容可以更改n
,因此如果输入循环,则我们知道n
将始终大于1
。您应该在循环中递减n
:
while(n > 1){
factorial = n--*factorial;
}
如果你不习惯看到这样的说法,你也可以在新的一行上做到:
while(n>1){
factorial = n*factorial;
n--;
}
答案 2 :(得分:1)
您应该在n
函数中减少factorial
。
答案 3 :(得分:1)
你有一个错误的阶乘方法实现。
int factorial(int n){
int factorial = 1;
while(n>1){
factorial = n*factorial;
n--;
}
return factorial;
}
你的代码根本没有对n变量做任何事情并保持相乘,而不会减少n值。希望这有帮助