反復と無制限のメモリによって再帰を置き換えることができます。
繰り返し(たとえば、whileループ)と有限量のメモリしかない場合は、有限オートマトンしかありません。メモリの量が限られている場合、計算には可能なステップの数が有限であるため、有限オートマトンですべてをシミュレートすることができます。
無制限のメモリがあると、取引が変わります。この無制限のメモリは、同等の表現力を持つことが判明した多くの形をとることができます。たとえば、チューリングマシンはシンプルです。1本のテープがあり、コンピューターは一度に1ステップずつテープ上を前後にしか移動できませんが、再帰関数でできることは何でもできます。
チューリングマシンは、必要に応じて成長する追加のストレージを備えたコンピューター(有限状態マシン)の理想的なモデルと見なすことができます。テープに有限の境界が存在するだけでなく、入力が与えられたとしても、必要なテープの量を確実に予測できないことが重要です。入力から必要なテープの量を予測(計算)できる場合は、最大テープサイズを計算し、現在の有限テープを含むシステム全体を有限状態マシンとして扱うことにより、計算を停止するかどうかを決定できます。 。
コンピューターでチューリングマシンをシミュレートする別の方法は次のとおりです。テープの先頭をメモリに保存するコンピュータープログラムでチューリングマシンをシミュレートします。計算がメモリに収まるテープの部分の終わりに達した場合、コンピューターをより大きなコンピューターに交換し、計算を再実行します。
ここで、コンピューターを使用して再帰的計算をシミュレートするとします。再帰関数を実行する手法はよく知られています。各関数呼び出しにはスタックフレームと呼ばれるメモリがあります。重要なのは、再帰関数が変数を渡すことで複数の呼び出しを通じて情報を伝播できることです。コンピューターでの実装という点では、関数呼び出しは(grand-)*親呼び出しのスタックフレームにアクセスする可能性があることを意味します。
コンピューターはプロセッサーであり、有限状態マシン(膨大な数の状態がありますが、ここでは計算理論を行っているため、重要なのは有限であるということです)と有限メモリーを組み合わせたものです。マイクロプロセッサは1つの巨大なwhileループを実行します。「電源がオンになっている間に、メモリから命令を読み取り、実行します」。(実際のプロセッサはそれよりもはるかに複雑ですが、計算できるものには影響せず、どれだけ速く便利に実行できます。)コンピューターは、このwhileループだけで再帰関数を実行して、反復とメカニズムを提供できます。自由にメモリのサイズを増やす機能を含むメモリにアクセスします。
あなたは原始再帰に再帰を制限する場合は、に反復を制限することができ有界反復。つまり、予測不可能な実行時間でwhileループを使用する代わりに、ループの先頭で反復回数がわかっているループに使用できます¹。反復の数は、プログラムの開始時にはわからない場合があります。それ自体は、以前のループによって計算された可能性があります。
ここでは証明をスケッチするつもりはありませんが、プリミティブな再帰から完全な再帰への移行とforループからwhileループへの移行との間には直感的な関係があります。どちらの場合も、やめる。完全再帰では、最小化演算子を使用してこれを行います。最小化演算子では、条件を満たすパラメーターが見つかるまで続けます。whileループの場合、これはループ条件が満たされるまで継続することで行われます。
¹Cに似た言語のループは、のように無制限の反復を実行できます。これは、ループを有界の反復に制限するのが慣例です。計算理論で人々が「forループ」について話すとき、それは1から(または同等)までカウントするループのみを意味します。 forwhilen