タグ付けされた質問 「recursion」

再帰は、関数がそれ自体を呼び出す一種の関数呼び出しです。このような関数は、再帰関数とも呼ばれます。構造的再帰は、問題を解決する方法であり、問​​題の解決策は同じ問題の小さなインスタンスの解決策に依存します。

3
Python:再帰アルゴリズムをジェネレータとして使用する
最近、私は重要な制約を持つ特定のシーケンスを生成する関数を書きました。問題は、自然な再帰的な解決策で発生しました。今では、比較的小さな入力の場合でもシーケンスが数千になるため、すべてのシーケンスをリストに入力するのではなく、アルゴリズムをジェネレーターとして使用したいと思います。 例を示します。再帰関数で文字列のすべての順列を計算したいとします。次の単純なアルゴリズムは、追加の引数「ストレージ」を取り、それが見つかるたびに置換を追加します。 def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage, prefix+string[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation (非効率性については気にしないでください。これは単なる例です。) 次に、関数をジェネレーターに変換します。つまり、ストレージリストに追加するのではなく、順列を生成します。 def getPermutations(string, prefix=""): if len(string) == 1: yield prefix + string # <----- else: …


1
パラモーフィズムとは何ですか?
この古典的な論文を読んで、私はパラモーフィズムにこだわっています。残念ながら、このセクションはかなり薄く、ウィキペディアのページには何も書かれていません。 私のHaskellの翻訳は: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) しかし、私はそれをしていません-私は型シグネチャや希望する結果について直感を持っていません。 パラモーフィズムとは何ですか?実際に役立つ例は何ですか? はい、私はこれらの 質問を見ましたが、それらはパラモーフィズムを直接カバーしておらず、参考資料として役立つかもしれないが、学習資料としては役立つかもしれないリソースのみを指しています。

30
再帰の実際の例[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 この質問を改善する 深さ優先検索(DFS)以外に再帰的アプローチが自然な解決策である実際の問題とは何ですか? (私はハノイの塔、フィボナッチ数、または階乗の実世界の問題を考慮していません。それらは私の心の中で少し工夫されています。)
94 recursion 

5
JavaScript関数を再帰的に呼び出す
次のように、変数に再帰関数を作成できます。 /* Count down to 0 recursively. */ var functionHolder = function (counter) { output(counter); if (counter > 0) { functionHolder(counter-1); } } これにより、functionHolder(3);が出力されます3 2 1 0。私が次のことをしたとしましょう: var copyFunction = functionHolder; copyFunction(3);3 2 1 0上記のように出力されます。その後functionHolder、次のように変更した場合: functionHolder = function(whatever) { output("Stop counting!"); その後、期待どおりにfunctionHolder(3);を与えるでしょうStop counting!。 copyFunction(3);今与え3 Stop counting!、それが指すようにfunctionHolder(それ自体が指す)、機能しません。これは状況によっては望ましいかもしれませんが、関数を保持する変数ではなくそれ自体を呼び出すように関数を作成する方法はありますか? つまり、これらのすべての手順を実行しても、呼び出し時にまだ与えることができるように、行のみを変更することは可能ですか?私は試しましたが、それは私にエラーを与えます。functionHolder(counter-1);3 2 1 0copyFunction(3);this(counter-1);this …



18
PHP再帰関数を使用してディレクトリ内のすべてのファイルとフォルダを一覧表示します
ディレクトリ内のすべてのファイルを調べようとしています。ディレクトリがある場合は、移動するディレクトリがなくなるまで、そのすべてのファイルを調べます。処理されたすべてのアイテムは、以下の関数の結果配列に追加されます。何ができるのか、何が間違っているのかはわかりませんが、動作していませんが、以下のコードを処理するとブラウザの動作がめちゃくちゃ遅くなります。 コード: function getDirContents($dir){ $results = array(); $files = scandir($dir); foreach($files as $key => $value){ if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){ $results[] = $value; } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) { $results[] = $value; getDirContents($dir. DIRECTORY_SEPARATOR .$value); } } } print_r(getDirContents('/xampp/htdocs/WORK'));
87 php  recursion 

6
継承と再帰
次のクラスがあるとします。 class A { void recursive(int i) { System.out.println("A.recursive(" + i + ")"); if (i > 0) { recursive(i - 1); } } } class B extends A { void recursive(int i) { System.out.println("B.recursive(" + i + ")"); super.recursive(i + 1); } } 次にrecursive、クラスAを呼び出します。 public class Demo { public static …

1
Python:最大再帰深度を超えました
次の再帰コードがあります。各ノードでSQLクエリを呼び出して、ノードが親ノードに属していることを確認します。 ここにエラーがあります: Exception RuntimeError: 'maximum recursion depth exceeded' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored RuntimeError: maximum recursion depth exceeded while calling a Python object Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored SQLの結果を取得するために呼び出すメソッド: def returnCategoryQuery(query, variables={}): …

3
ダミーのための再帰スキーム?
たくさんのリンクをたどったり、圏論の教科書を開いたりする必要のない、再帰スキームとコアカーションスキーム(カタモルフィズム、アナモルフィズム、ハイロモルフィズムなど)の非常にシンプルでわかりやすい説明を探しています。私はこれらのスキームの多くを無意識のうちに再発明し、コーディングの過程で頭の中でそれらを「適用」したと確信しています(私たちの多くが持っていると確信しています)が、私は(共)再帰スキームが何であるかわかりません使用と呼ばれます。(OK、私は嘘をついた。私はそれらのいくつかについて読んでいたので、この質問を促した。しかし、今日まで、私には手がかりがなかった。) プログラミングコミュニティ内でのこれらの概念の普及は、たとえばWikipediaだけでなく、他の場所でも見られる傾向のある禁止された説明や例によって妨げられていると思います。 それはおそらく彼らの名前によって妨げられています。いくつかの代替の、数学的な名前(バナナや有刺鉄線についての何か?)があると思いますが、私が使用する再帰スキームのよりかわいい名前が何であるかについてもわかりません。 二分木などの抽象データ型ではなく、単純な現実世界の問題を表すデータ型の例を使用すると役立つと思います。

4
歩留まりを使用した再帰
再帰とyieldステートメントを組み合わせる方法はありますか?たとえば、(再帰を使用する)無限数ジェネレータは次のようになります。 def infinity(start): yield start # recursion here ... >>> it = infinity(1) >>> next(it) 1 >>> next(it) 2 私は試した: def infinity(start): yield start infinity(start + 1) そして def infinity(start): yield start yield infinity(start + 1) しかし、それらのどれも私が望むことをしませんでした、最初のものはそれが降伏した後に停止startし、2番目のものは降伏しstart、次にジェネレーターそしてそれから停止しました。 注: whileループを使用してこれを実行できることを知っています。 def infinity(start): while True: yield start start += 1 これを再帰的に実行できるかどうかを知りたいだけです。

4
データベースの結果から多次元配列を生成する再帰関数
(フラットデータベースの結果から)ページ/カテゴリの配列を取得し、親IDに基づいてネストされたページ/カテゴリアイテムの配列を生成する関数を作成しようとしています。これを再帰的に実行して、任意のレベルのネストを実行できるようにします。 例:1つのクエリですべてのページをフェッチしていますが、これはデータベーステーブルの外観です。 +-------+---------------+---------------------------+ | id | parent_id | title | +-------+---------------+---------------------------+ | 1 | 0 | Parent Page | | 2 | 1 | Sub Page | | 3 | 2 | Sub Sub Page | | 4 | 0 | Another Parent Page | +-------+---------------+---------------------------+ そして、これは私がビューファイルで処理するために最終的に使用したい配列です: Array ( [0] …

10
Node.js-最大コールスタックサイズを超えました
コードを実行すると、Node.jsは"RangeError: Maximum call stack size exceeded"再帰呼び出しが多すぎるために例外をスローします。Node.jsスタックサイズを増やしようとしましたが、Node.jssudo node --stack-size=16000 appがエラーメッセージなしでクラッシュします。sudoを使用せずにこれを再度実行すると、Node.jsはを出力し'Segmentation fault: 11'ます。再帰呼び出しを削除せずにこれを解決する可能性はありますか?

9
再帰関数が呼び出された回数を追跡する
function singleDigit(num) { let counter = 0 let number = [...num + ''].map(Number).reduce((x, y) => {return x * y}) if(number <= 9){ console.log(number) }else{ console.log(number) return singleDigit(number), counter += 1 } } singleDigit(39) コードスニペットを実行する結果を非表示スニペットを展開 上記のコードは整数を受け取り、それをそれ自身の桁で乗算することにより1桁に減らします。 例は39です。 3 x 9 = 27. 2 x 7 = 14. 1 x 4 = …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.