2016-04-07 17 views
0

私はプログラミング全体の初心者です。私は本からプログラミング演習を行っています。私は再帰関数を書くはずの本の一部に達しました。いくつかのプログラムがクラッシュし、何が間違っているのか分かりません。これら2つを比較してください:C再帰的なプログラムのクラッシュ

  1. これは、キーボードと番号から数値を読み取る必要があります。 (数の階乗)。私は、これは、キーボードからのnを読み込み、文字列内のn番目の要素の値を返す必要があり

    #include <stdio.h> 
    
    int number, x; 
    int factorial (int a); 
    
    int main() { 
    
    printf("Input a nonnegative whole number: \n"); 
    scanf("%d", &number); 
    
    int x = factorial(number); 
    printf("Factorial of %d equals %d", number, x); 
    
    return 0; 
    } 
    
    int factorial (int a){ 
    if(a=0) { 
         return 1; 
        } else { 
         return a*factorial(a-1); 
        } 
    } 
    
  2. 数を入力しようとした後にそれがクラッシュします。これはクラッシュしません。

    #include <stdio.h> 
    
    int n; 
    int string (int a); 
    
    int main() { 
    
        printf("Input a nonnegative whole number: \n"); 
        scanf("%d", &n); 
        int x = string(n); 
        printf("%d element of the string equals %d", n, x); 
    
        return 0; 
    } 
    
    int string (int a) { 
        int value; 
        if (a<=1) { 
         value = 1; 
        } else { 
         value = string(a-1) + 2*string(a-2) + 3; 
        } 
        return value; 
    } 
    

これら2つのプログラムが私にはほとんど同じように見えます。なぜ最初のものがクラッシュし、2番目のものがクラッシュするのか分かりません。助けてください、事前にありがとうございます。

+7

'if(a = 0)' - それを非常によく見て、欠けている文字があります。 – Mat

+0

デバッガを使用する方法を学び、そのような簡単な問題を見つけるのに役立ちます。 –

+0

いくつかのコンパイラがこのことについて警告しています... –

答えて

2

if(a=0)を使用しましたが、等号は、aと0を比較する代わりに、0にaを代入します。 代わりにif(a==0)を使用してください。