[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について
質問
この2つの再帰的戦略の違いを知りたいのです。
私が教えてもらった定義は以下の通りです。
テールリカーシオン。 呼び出しが返された後に何もする必要がない場合、つまり呼び出しが返されたときに戻り値が呼び出し元の関数から直ちに返される場合、呼び出しは末尾再帰的である。
ヘッド・リカーシオン。 関数の最初のステートメントが再帰的呼び出しである場合、呼び出しは頭部再帰的である。
どのように解決するのですか?
で
head recursion
再帰呼び出しが発生した場合、関数内の他の処理よりも先に実行されます(関数の先頭で実行されると考えてください)。
で
tail recursion
これは逆で、再帰呼び出しの前に処理が行われる。2つの再帰的スタイルのどちらを選ぶかは任意に思えるかもしれないが、その選択によってすべての違いが生じる可能性がある。
パスの先頭に1つの再帰呼び出しを持つパスの関数は、頭再帰と呼ばれるものを使用します。前の展示の階乗関数は、頭部再帰を使用しています。再帰が必要だと判断したときに最初に行うのは、デクリメントされたパラメータを持つ自分自身を呼び出すことです。 パスの末尾に1回だけ再帰呼び出しを行う関数は、末尾再帰を使用している。 この記事を参照する
再帰の例:
public void tail(int n) | public void head(int n)
{ | {
if(n == 1) | if(n == 0)
return; | return;
else | else
System.out.println(n); | head(n-1);
|
tail(n-1); | System.out.println(n);
} | }
再帰呼び出しがメソッドの末尾に発生した場合、それは
tail recursion
. 末尾再帰は
similar to a loop
. その
method executes all the statements before jumping into the next recursive call
.
で再帰呼び出しが発生した場合
beginning of a method, it is called a head recursion
. その
method saves the state before jumping into the next recursive call
.
関連
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み] Oracle JDKとOpenJDKの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] 文字列の巻き方
-
[解決済み] 末尾再帰とは何ですか?