0

これは宿題の質問ではありません。私は自分自身の教化のプロセスを理解しようとしているだけです。私はコンピュータ サイエンスの学生として、再帰の概念が議論されたいくつかの講義に出席しました。しかし、私の意見では、講師は、スタック フレームの概念と、最終的な値を計算するためにコール スタックがどのようにトラバースされるかに関して、少しあいまいでした。私が現在想像しているプロセスの方法は、ツリーをトップダウンで構築することに似ています (項目をコール スタックにプッシュする - 後入れ先出しのデータ構造)。頂上に到達。おそらく標準的な例:

def fact(n):
    if n == 0: 
        ans = 1
    else:
        ans = n * fact(n-1)
    return ans

value = fact(5)
print (value)

上で示したように、コール スタックは最終的に次の (大雑把に) 描かれた図に似ていると思います。

+----------+
|    5      |
|    4      | 
|    3      |
|    2      |
|    1      |
 +----------+

各数値はスタック フレーム内に「囲まれ」、制御は下 (1 の値) から 2、3 のように進みます。ただし、オペレーターがプロセスのどこに存在するかは完全にはわかりません。ある時点で抽象構文木 (AST) が関与していると想定するのは間違いでしょうか? それとも演算子を含む 2 番目のスタックが存在するのでしょうか?

助けてくれてありがとう。

〜ケイトリン

編集:「再帰」タグを削除し、「関数」および「スタックフレーム」タグを追加しました。

4

2 に答える 2

1

この質問は、再帰についてではなく、関数呼び出しがどのように機能するかについてです。関数が呼び出されると、フレームが作成され、スタックにプッシュされます。フレームには呼び出しコードへのポインターが含まれているため、プログラムは関数呼び出しの後に戻る場所を認識できます。演算子は、呼び出しポイントの後の実行可能コードに存在します。

于 2014-03-15T08:21:44.330 に答える