• ベストアンサー

スタック

次のプログラムにおいて、fact(5)を実行している時のスタックの様子が分かりません。また、どのような値を持つどのような要素が積まれているかを教えてください。 #include <stdio.h> int fact(int k){ static int l=1; int m = k; if(k==0) return l; else { return fact(m-1)*m; } } main(){ int n=10; int k; k = fact(n); printf("%d\n", k); } よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

スタックにはこんなものがつまれているはず。 int n=10 - main() int k=? - main() int k=5 - fact(5) int m=5 - fact(5) int k=4 - fact(4) - fact(5)の最後の行fact(5-1)*5で呼び出されたもの int m=4 - fact(4) int k=3 - fact(3) int m=3 - fact(3) int k=2 - fact(2) int m=2 - fact(2) int k=1 - fact(1) int m=1 - fact(1) int k=0 - fact(0) int m=0 - fact(0) 以上、最も深いfact(0)を実行している段階でのスタックの状態。呼び出し元のインストラクションポインタなどは省いてます。fact(5)の状態なら、上の上から4行目まで。

0418
質問者

お礼

ありがとうございました。またよろしくお願いします。

0418
質問者

補足

スタックの様子を詳しく丁寧に説明していただき ありがとうございます。 一つ尋ねたいのですが、このプログラムを実行したときにfact(10)からfact(6)の関数は実行されないのですか。

その他の回答 (1)

  • kaha
  • ベストアンサー率23% (41/177)
回答No.2

VC++の開発環境があれば、ステップで実行しながら確認できるのですが、お持ちでしょうか? デバグの実行中に右クリックで「混合モードを表示」を実行すると、アセンブラ単位での実行確認ができます。

0418
質問者

お礼

ありがとうございました。またよろしくお願いします。

関連するQ&A