「再帰」の編集履歴(バックアップ)一覧はこちら

再帰」(2010/07/24 (土) 01:30:45) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#asciiart(blockquote){ '再帰 Function sum41(a As long, b As long) as long if a>b then exit function sum41=a+sum41(a+1,b) End Function #N88BASIC Print sum41(sum41(1,sum41(-1,3)),sum41(sum41(1,sum41(1,2)),9)) } ループはなんでも再帰するのが上級者。
[[関数>関数はどう作るの?]]内で、自身の関数を呼ぶ処理のこと。再帰的関数を使う事で、ある種のアルゴリズム表記を端的に 表現可能な場合もあるが、多くの場合、デバックや可読性に難が生じる場合がある。 一般に、再帰的表現はループ展開による表現が可能である。 #asciiart(blockquote){ '再帰 Function sum41(a As long, b As long) as long if a>b then exit function sum41=a+sum41(a+1,b) End Function #N88BASIC Print sum41(sum41(1,sum41(-1,3)),sum41(sum41(1,sum41(1,2)),9)) } 再帰的処理では、自身の関数を呼ぶので、結果として無限ループとなる。したがって、通常はif文などを 用いて停止条件などを指定する必要がある。 しかし実際には再帰的関数は、幾つかの手続き型言語では、再帰関数は無限ループとはならない。 原因は、関数を実行する際の引数保存スタックで、引数等をスタックと呼ばれる変数に一時的に退避する仕組みを持つ為。 スタックは無限ではないので、再帰途中で停止する。 再帰的関数の代表的な例は、LispやSchemeなどのプログラミング言語で、殆どの処理においてループに該当する 処理は再帰的関数として書かれ、ループ構文が無い言語も存在する。 近年になり、幾つかのプログラミング言語ではLisp的な機能を取り入れる等、見直されている。 ループはなんでも再帰するのが上級者。

表示オプション

横に並べて表示:
変化行の前後のみ表示: