-6

重複の可能性:
このコードで実際に何が起こっているのですか?

この問題では、再帰の概念を適用できません

#include<stdio.h>
count(int); 
main()
{
  int x=4;
  count(x);
  return 0;
 }
 count(int n)
 {
   if(n>0)
   { 
     count(n-1);
     printf("%d",n);
     count(n-1);
   }
  }

実行すると、プログラムcount(4),count(3),count.....count(0)はスタックに格納されます...しかし、count(0)が呼び出され、if条件がfalseの場合、コントロールはどこに移動しますか?さまざまな関数呼び出しを示す図を使用して、誰かが説明できる場合は、どうぞ。

4

2 に答える 2

0

ダイアグラムは必要ありません。を使用count(0)すると、ifステートメントは失敗し、count何もせずにすぐに戻ります。

編集:元の形式のプログラムがUBであることを指摘してくれたFlexoに感謝します。これは、intを返すように宣言された関数が、何も返さないときに何をするかわからないためです。(実際には、ほとんどの呼び出し規約は無害に動作すると思いますが、もちろんそれでも間違っています。)

于 2012-09-06T12:24:30.073 に答える
0

次のコードを試してみてください。

#include<stdio.h> 
count(int);  
int  main() 
{ 
    int x=4; 
    count(x); 
    return 0; 
} 

int count(int n) 
{ 
    if(n>0) 
    {  
        printf("%d",n); 
        return count(n-1);
    }
    else
    {
        printf("%d",n); 
        return n; 
    } 
} 
于 2012-09-06T12:35:35.067 に答える