「帰納的に」と「再帰的に」は非常に類似した意味を持っていますか?


11

「帰納的に」と「再帰的に」は非常に似ていることを意味しますか?

たとえば、決定された最初のk成分に基づいて最初のk + 1成分を決定することによりn次元ベクトルを決定し、最初の成分で初期化されるアルゴリズムがある場合、それは再帰的または帰納的に機能しますか?私は「再帰的に」使用してきましたが、今日誰かが「帰納的に」それを言いました。


帰納法と再帰法に関するこの記事はそれをうまく要約していますが、要点はそれらが密接に関連しているということです。数学的帰納証明は、再帰的アルゴリズムとして書くことができます。
Merbs、

帰納的には通常、からまでの再帰を意味するので、より一般的な副詞は再帰的です。n + 1nn+1
Yuval Filmus

@YuvalFilmus、帰納的にはどのような再帰的ではありませんか?
Tim

@YuvalFilmus:これは、非常に限定的な帰納法の概念です。
Dave Clarke

私にとって、それらは文脈外の同じことを意味します。特定のコンテキストでは、それらは異なる意味を持つ場合があります。
Gilles「SO-悪をやめる」

回答:


6

いいえ。ただし、他の人からの理由によるものではありません。再帰と帰納の違いは、再帰が「トップダウン」であり、帰納が「ボトムアップ」であるということではありません。帰納法は "primitve recursion"と呼ばれるものに同型ですが、一般に、再帰法は厳密に帰納法よりも強力です

トップダウンとボトムアップの違いは取るに足らないものです。「トップダウン」プリミティブ再帰プログラムは、機械的に「ボトムアップ」に変換できます。実際、帰納法による証明は再帰プログラムに変えることができます。帰納的構造の計算のフレームワークで、すべての自然数が不正であることを証明したい場合は、nが不正であるという証明を構築するための再帰呼び出しを行うことにより、nが不正であるという証明を構築する関数として記述します。 1は不正解です。

帰納の重要な要素は、物事はより小さな物事に関して定義され、有限の数のステップの後に「ボトムアウト」することです。すべての自然数が0または小さい自然数の後継のいずれかであるため、自然数は帰納的です。すべてのリストが空であるか、要素と小さなリストに分解(「展開」)できるため、リストは帰納的です。

ただし、再帰的なプログラムは、小さなもので書かれていない場合があります。たとえば、次のCollat​​z関数を見てみましょう。

fun collatz(n) 
   if n <= 1
      return 0;
   else if n % 2 == 0
     return 1 + collatz(n / 2)
   else
     return 1 + collatz(3 * n + 1)
end

この関数はトップダウンにもボトムアップにもならないため、自然数に対して帰納的ではありません。

それを帰納的に扱う命令があるかもしれませんが、ほとんどの場合、単に方法はありません。無限ストリーム上の関数はその良い例です。実際、ストリームは「誘因的」タイプの典型的な例です。

Bob Harperの「Practical Foundations for Programming Languages」は、オンラインで無料で入手でき、帰納型、共帰型、および再帰型の入門書です。


2

私にとってそれは主に視点の問題です。小さいオブジェクトに基づいてオブジェクトを定義する場合、帰納的にそれを行うので、ボトムアップです。問題を小さな部分に分割して解決する場合、それを再帰と同じ方法で解決します。これはトップダウンです。

(編集)PS。数学の姉妹部門の再帰的帰納的定義の同様の質問を参照してください。カールママートの答えから引用します。

私の最高の説明は、「何もない状態で」オブジェクトのセットを定義するときに「帰納的定義」がより一般的であり、既存のオブジェクトのコレクションに対して関数を定義するときに「再帰的定義」がより一般的であるということです。

しかし、より重要なこと:

眠りに落ちる価値はない


つまり、「再帰=分割統治」です。最初にトップダウン、次にボトムアップですか。
Tim

1

いいえ、同じではありません。そして、あなたは正しいです(私はあなたが説明しているアルゴリズムについて仮定しています):それは再帰的です。

その理由は、辞書またはウィキペディアで読むことができる両方の単語の定義です。

帰納法(「数学的帰納法」を想定)は、議論のすべてのケースが真であることを証明することについて具体的に述べています。

再帰とは、具体的には、同じプロセス内で何らかの方法で繰り返される可能性があるプロセスに関するものです。

RE:他の人の答え:

他の人の答えを見た後、なぜ混乱があるのか​​理解できます。データ構造、関数、言語を定義するときに、一部の理論家は「帰納的」と「再帰的」を紛らわしい方法で使用しているようです(この質問へのコメントを参照)。Koppelの回答(現在の投票数が最も多い場合でも)が本当に混乱を反映しているとは思いません。アルゴリズムについて話しているので、「帰納的アルゴリズム」があるとは言いません。それは不必要な分類だと思います。


帰納は証明だけではありません。また、再帰的な構造(データ構造、言語など)を帰納的に定義するためにも常に使用します
hugomg

@missingnoその定義のソースを提供してください。
トム

私は考えることができ一つの例はここに:「またformulæのセット、整形式やwffsとして知られている\ mathcal {L}、の言語は、誘導次の規則によって定義されます:」
hugomg

@missingnoは、このWikipediaのページにつながります。ここでは、「帰納的」という単語の冗長で混乱を招く使用法があり、本質的に「再帰的」として使用されています
Tom

さらに多くの例を探しさせないでください。あなたはそれに同意しないかもしれませんが、それは間違いなく非常に一般的なイディオムであり、あなたがそれを探すならば、あなたはそれを多くの本でも見つけることができます。そして、誰かが私の目的を証明するためにウィキペディアの記事を意図的に編集したようではありません...
hugomg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.