-6

次のコードの出力を説明できる人はいますか? 出力がどのようにコンパイラーに表示されているかわかりません。助けてください。

#include<stdio.h>
int fun(int count)
{

    printf("%d\n", count);

    if(count < 4)
    {
      fun(fun(fun(++count)));
    }
    return count;
}

int main()
{

     fun(1);

    return 0;
}
4

1 に答える 1

2

本当に従いたい場合は、従うことができますが、呼び出し履歴を注意深く追跡してください。

main: fun(1)
main: fun(1):                                               prints 1
main: fun(1): fun(2):                                       prints 2
main: fun(1): fun(2): fun(3):                               prints 3
main: fun(1): fun(2): fun(3): fun(4) [1st call]:            prints 4
main: fun(1): fun(2): fun(3): fun(4) [1st call]:  returns 4
main: fun(1): fun(2): fun(3): fun(4) [2nd call]:            prints 4
main: fun(1): fun(2): fun(3): fun(4) [2nd call]:  returns 4
main: fun(1): fun(2): fun(3): fun(4) [3rd call]:            prints 4
main: fun(1): fun(2): fun(3): fun(4) [3rd call]:  returns 4
main: fun(1): fun(2): fun(3):                     returns 4
main: fun(1): fun(2): fun(4):                     returns 4
...

などなど・・・ちょっと面倒です。おそらく、'< 4' を '< 2' に減らして単純化し、 への再帰呼び出しを 2 つだけにすることができますfun()。そうすれば、フォローしやすくなります。

于 2013-06-25T18:46:19.827 に答える