2017-06-26 9 views
-5

以下はコードですが、私が間違っている箇所を正確にピンポイントしてください。 私は宣言して、関数を定義しました、何が間違っているのか分かりません。なぜこの階乗の再帰的プログラムは機能しないのですか?

#include<stdio.h> 
int factorial(int b); /* Declaration */ 


int main() 
{ 
    int num; 
    printf("Enter number: "); 
    scanf("%d", &num); 
    printf("%d",factorial(num)); 
    return 0; 
} 

int factorial(int b) /*Function definition*/ 
{ 

    return b*factorial(b-1); 

} 
+1

はタグ付きではないスパムをしてくださいますか。これはC言語ではありません# –

+1

どのようなデバッグ試行をしましたか?ヒント:「階乗(0)」の価値はどうあるべきですか? – lurker

+0

関連して、根本的な問題は、このサイト上の*多くの*再帰的な質問の直接の複製です(この**を含む**)(https://stackoverflow.com/questions/15058449/recursive-factorial-program-in- c-hangs-when-executing)。再帰チェーンを停止するための基本ケースはありません。無関係で、あなたがこれを修正した後でも、あなたの入力要件を満たすために完全に正当な '-1'(または任意の負の値)を入力した人に何が起こるかを検討することをお勧めします。何か邪悪な、この方法が来る。 – WhozCraig

答えて

5

あなたはいくつかの点で再帰を終了する必要があります。

int factorial(int b) /*Function definition*/ 
{ 
    if (b == 0) return 1; 
    return b*factorial(b-1); 

} 
+4

だから約-1 ... –

+0

Factorialsは負の数のために定義されていないので、 'unsigned int'はより適切な日付の型になります... – Aconcagua