-1

私はこのプログラムを書きました:

#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;
}

しかし、私がそれを実行すると、それはただそこに座っています。階乗の呼び出しと関係があると思います。コメントすると、すぐに機能しますが、入力すると、最初のprintfに到達することすらありません。

私は何が間違っているのですか?

4

4 に答える 4

6
while(n > 1){
    factorial = n*factorial;
}

あなたが逃したn--;

于 2012-06-22T14:42:40.207 に答える
3

whileループ:

while(n>1){
    factorial = n*factorial;
}

永遠に実行されます。そのループには変更できるものは何もないので、ループに入ると、常に。より大きくなることがnわかります。ループ内でデクリメントする必要があります。n1n

while(n > 1){
    factorial = n--*factorial;
}

そのような減少を見ることに慣れていない場合は、新しい行でそれを行うこともできます。

while(n>1){
    factorial = n*factorial;
    n--;
}
于 2012-06-22T14:43:10.807 に答える
1

関数をデクリメントする必要がありnますfactorial

于 2012-06-22T14:43:10.720 に答える
1

階乗メソッドの実装が間違っています。

int factorial(int n){
 int factorial = 1;
 while(n>1){
     factorial = n*factorial;
     n--;
 }
 return factorial;
}

あなたのコードは単にn変数で何もせず、n値を減らすことなく乗算を続けました。お役に立てれば

于 2012-06-22T14:47:38.207 に答える