再帰とは
さいき
関数が処理の中で自分自身を呼び出すこと。問題を同じ形の小さな問題に分けて解き、それ以上分けない場合(基底)で呼び出しを終える。呼び出しごとにスタックを使うので深すぎるとあふれる。最後に自分を呼ぶだけの末尾再帰は、ループに変換できる。
「再帰」は、8分野の14問の練習問題に出てきます(データ構造とアルゴリズム, リンカ・ローダと実行形式, プログラミングの基礎(擬似言語のトレース)など)。
この用語の分野: データ構造とアルゴリズム
さいき
関数が処理の中で自分自身を呼び出すこと。問題を同じ形の小さな問題に分けて解き、それ以上分けない場合(基底)で呼び出しを終える。呼び出しごとにスタックを使うので深すぎるとあふれる。最後に自分を呼ぶだけの末尾再帰は、ループに変換できる。
「再帰」は、8分野の14問の練習問題に出てきます(データ構造とアルゴリズム, リンカ・ローダと実行形式, プログラミングの基礎(擬似言語のトレース)など)。
この用語の分野: データ構造とアルゴリズム
再帰呼び出しのjalは、raを「自分の中の呼び出しの次の命令」で上書きします。
RISC-Vで、自分自身を呼び出す再帰関数を書くときに、raをスタックに保存し忘れるとどうなるか。この関数の再帰呼び出しは、関数の最後の処理で、その結果をそのまま返しています(末尾呼び出し)。
上の関数の最後の再帰呼び出しに末尾呼び出しの最適化を行うと、どのような効果があるか。再帰が深すぎてスタックがここに達すると、ページフォルトが起きてOSがプログラムを止めます(セグメンテーション違反)。
再帰が深くなりすぎてスタックの上限を超えたとき、Linuxなどで一般に起こることとして正しいものはどれか。スタックは後から入れたものを先に取り出す(LIFO)構造で、呼び出しが入れ子や再帰になっても正しい順で戻れます。
プログラムでサブルーチン(関数)を呼び出すとき、戻り先のアドレスなどを一時的に保存するために一般的に使われる領域はどれ…そのため、再帰で同じ関数が何重に呼ばれても、それぞれが別の変数を持てます。
C言語の関数の中で宣言した、staticの付かない局所変数(自動変数)は、実行中どこに置かれるか。Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。