0

再帰的なプログラムがあります。関数で使用する場合はprintf123を出力し、外部で使用する場合は0123を出力します。

#include <stdio.h>

fact(int);
int main()
{
    int x=3;
    fact(x);
    printf("\n");
    system("PAUSE");
}

int fact(int y)
{
    if (y > 0)
    {
         fact(y-1);
         printf("%d",y);  
    }
    //printf("%d",y);   
}   

両方をprintf同時に使用していません。printfこのステートメントの場所はどのような違いを生み出しますか?

4

4 に答える 4

1

if条件はゼロより大きい値を探すため、期待どおりに機能しています。

于 2012-09-23T12:16:35.750 に答える
1

そのブロックのprintf外側をIF使用すると、yが0の場合でも実行されます。これは、ブロックのprintf内側には当てはまりません。IF

于 2012-09-23T12:17:00.060 に答える
0

fact(int)は、次のシーケンスで呼び出されます。

fact(3)-> fact(2)---> fact(1)---> fact(0)

最後の呼び出しはfact(0)です。fact(int)の実装によれば、0が渡されると、printf()が外部で使用されると0が出力されます。内部でprintf()が使用されている場合、0は出力されません。

実際、fact(int)に渡されたすべての値は、printf()が外部で使用されたときに出力されます。

于 2012-09-23T13:02:49.743 に答える
0

自分で答えが表示されなかった理由の1つは、コードがずさんなためだと思います。ここにいくつかの不満があります:

  1. 関数には、再帰コードを理解するために特に重要な明示的なreturnステートメントがありません。
  2. system()にはstdlibが必要ですが、stdlib.hは含まれていません。
  3. system( "PAUSE")は移植性がなく、不要です。このため、実際にはコードは私のシステムでは実行されません。参照: http ://www.gidnetwork.com/b-61.html
  4. あなたの質問は宿題のように見えるので、これは宿題のせいであり、あなたのせいではありません。非常に急速に成長するため、戻り型に「int」を使用する階乗関数はnのみを計算できます。1 <= n <= 12の場合、これは役に立ちません。

この演習を試してください。単一returnの条件付き割り当てを使用して、1行の階乗関数を記述します。

于 2012-09-23T13:29:36.990 に答える