0

私はCプログラミング言語に不慣れで、与えられた数の階乗を計算するための再帰を学ぼうとしています。私の質問は、「5」を入力するとデバッグprintfステートメントが出力されることです。2,6,24,120関数呼び出しが対応する値に置き換えられ、一度に階乗を計算する場合、どのように4回出力しますか?

#include<stdio.h>
#include<stdlib.h>

int factorial(int n);

int main()
{
        int num;
        int fact_val;
        printf("Enter the number for which you are going to compute the factorial:");
        scanf("%d",&num);

        fact_val=factorial(num);

        printf("The factorial of the given number is %d\n",fact_val);

        return 0;
}

int factorial(int n)
{
        int factorial_val;
        if(n==1)
        return 1;
        else
        {
                factorial_val=factorial(n-1)*n;
                printf("Debugger-%d\n",factorial_val);
        }
        return factorial_val;
}
4

1 に答える 1

4

ベースケースに到達するreturnと、印刷するのではなく、すぐに実行できます。

したがって、printffor case:5、4、3、2が表示され、関数が1に渡されると、値は出力されませんreturn。代わりに、あなたが表示されます。

さらに、印刷する前に再帰するため、ケースは少なくとも最初に順番に印刷されます。最初の印刷は、2まで繰り返した後にのみ行われます。したがって、次のように表示されます。2、6、24、120。現在の再帰から戻った場合にのみ、中間値が出力されます。

再帰を書き留めて、明確にします。

5 -> recurse with 4:
    4 -> recurse with 3:
        3 -> recurse with 2:
            2 -> recurse with 1:
                1 -> base case, just return...
            printf (1 * 2) = 2;
        printf (2 * 3) = 6;
    printf (6 * 4) = 24;
printf (24 * 5) = 120;
于 2012-08-14T01:05:58.110 に答える