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

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

8
末尾再帰はどの程度正確に機能しますか?
末尾再帰がどのように機能するか、および通常の再帰との違いをほぼ理解しています。私は唯一それが理由を理解していないしないそのリターンアドレスを覚えてスタックを必要としています。 // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * n); } int factorial (int n) { return fac_times (n, 1); } // normal recursion int factorial (int n) { if (n == 0) return 1; …

19
javascript:再帰的な匿名関数?
基本的な再帰関数があるとしましょう: function recur(data) { data = data+1; var nothing = function() { recur(data); } nothing(); } 次のような匿名関数がある場合、どうすればこれを実行できますか? (function(data){ data = data+1; var nothing = function() { //Something here that calls the function? } nothing(); })(); この関数を呼び出した関数を呼び出す方法が欲しい...呼び出された関数の名前を教えてくれるスクリプトがどこか(どこにあるか思い出せない)を見たことがありますが、どれも思い出せませんその情報今。

12
PHPでディレクトリを[再帰的に]圧縮する方法は?
ディレクトリは次のようなものです: home/ file1.html file2.html Another_Dir/ file8.html Sub_Dir/ file19.html PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.phpで使用されているものと同じPHP Zipクラスを使用しています。ファイルではなくディレクトリを圧縮する方法がわかりません。ここに私がこれまで持っているものがあります: $aFiles = $this->da->getDirTree($target); /* $aFiles is something like, path => filetime Array ( [home] => [home/file1.html] => 1251280379 [home/file2.html] => 1251280377 etc... ) */ $zip = & new Zip(); foreach( $aFiles as $fileLocation => $time ){ $file = $target …

11
リストpythonでファイルを再帰的に検索してファイルを返す
メインフォルダーのサブフォルダーを再帰的に調べ、特定のファイルの種類からリストを作成するスクリプトを作成しています。スクリプトに問題があります。現在、次のように設定されています for root, subFolder, files in os.walk(PATH): for item in files: if item.endswith(".txt") : fileNamePath = str(os.path.join(root,subFolder,item)) 問題は、subFolder変数が、ITEMファイルが配置されているフォルダーではなく、サブフォルダーのリストを取得していることです。以前にサブフォルダーのforループを実行してパスの最初の部分に参加することを考えていましたが、その前に提案があるかどうかを確認するためにIdをダブルチェックすると考えました。ご協力いただきありがとうございます!

9
再帰はそれ自体が機能ですか?
...それとも単なる練習ですか? 私は教授との議論のためにこれを求めています:クラスで再帰をカバーしなかったという理由で関数を再帰的に呼び出すことの信用を失いました、そして私の議論は学習returnと方法によって暗黙的にそれを学んだということです。 誰かが明確な答えを持っていると思うので、私はここで尋ねています。 たとえば、次の2つの方法の違いは何ですか。 public static void a() { return a(); } public static void b() { return a(); } 「a永久に継続する」(実際のプログラムでは、無効な入力が提供されたときにユーザーに再度プロンプトを表示するために正しく使用されます)以外に、との間に基本的な違いはaありbますか?最適化されていないコンパイラにとって、それらはどのように異なる方法で処理されますか? 最終的にはそれがに学習することでかどうかに降りてくるreturn a()からb、我々はまたに学んだそのことreturn a()からa。しましたか?
116 recursion 

18
再帰関数のしくみを理解する
タイトルが説明するように、私は非常に基本的なプログラミングの質問があります。すべての(非常に賢い)「再帰を理解するには、最初に再帰を理解する必要があります」を除外します。さまざまなオンラインスレッドからの返信まだ十分に理解できていません。 わからないことがわからない場合は、間違った質問をしたり、間違った質問をしたりする傾向があることを理解している。私にとって再帰的な電球をオンにするのに役立つ少しの知識! ここに関数があります(構文はSwiftで書かれています): func sumInts(a: Int, b: Int) -> Int { if (a > b) { return 0 } else { return a + sumInts(a: a + 1, b: b) } } 引数として2と5を使用します。 println(sumInts(a: 2, b: 5)) 答えは明らかに14です。しかし、その値がどのようにして達成されるかははっきりしません。 これらは私の2つのハングアップです: この関数は、条件が満たされるまで再帰的に呼び出されます。その条件はa> bです。この条件が満たされた場合は、0を返します。一見すると、戻り値が0であることが予想されますが、これは明らかに正しくありません。 各反復で「a」の値を出力すると、2、3、4、5と予想される値が得られます(この時点で、5 + 1> bは最初の条件を満たす:a> b)。 14の値がどのように達成されるかを確認します。 私の最初の考えは、次のようなものが魔法のように起こっているということです。 var answer …

30
ドルの価値を与えられたときにコインのすべての組み合わせを見つける方法
数か月前に面接準備のために書いているコードを見つけました。 私のコメントによると、それはこの問題を解決しようとしていました: セント単位のドルの値を指定して(たとえば、200 = 2ドル、1000 = 10ドル)、ドルの値を構成するコインのすべての組み合わせを見つけます。ペニー(1nie)、ニッケル(5¢)、ダイム(10¢)、およびクォーター(25¢)のみが許可されています。 たとえば、100が指定された場合、答えは次のようになります。 4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies 3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies etc. これは反復的かつ再帰的な方法で解決できると私は信じています。私の再帰的な解決策は非常にバグが多く、他の人がこの問題をどのように解決するのか疑問に思っていました。この問題の難しい部分は、それを可能な限り効率的にすることでした。

5
GDBの破損したスタックフレーム-デバッグ方法
次のスタックトレースがあります。これからデバッグに役立つものを作成することは可能ですか? Program received signal SIGSEGV, Segmentation fault. 0x00000002 in ?? () (gdb) bt #0 0x00000002 in ?? () #1 0x00000001 in ?? () #2 0xbffff284 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) (gdb) を取得しSegmentation fault、スタックトレースがあまり役に立たない場合、どこからコードを調べればよいでしょうか。 注:コードを投稿すると、SOの専門家が答えをくれます。私はSOからガイダンスを受けて自分で答えを見つけたいので、ここではコードを投稿しません。謝罪。
113 c  recursion  gdb 

10
再帰と反復
再帰が使用されるすべての場所でforループを使用できると言うのは正しいですか?そして、再帰が通常遅い場合、forループ反復でこれを使用する技術的な理由は何ですか? そして、再帰をforループに変換することが常に可能な場合、それを行うための経験則はありますか?

6
Ocaml / F#の関数がデフォルトで再帰的でないのはなぜですか?
F#およびOcaml(およびおそらく他の言語)の関数がデフォルトで再帰的でないのはなぜですか? 言い換えると、なぜ言語設計者は、次のrecような宣言を明示的に入力させるのが良い考えだと判断したのですか。 let rec foo ... = ... デフォルトで関数の再帰機能を提供しないのですか?なぜ明示的なrec構成が必要なのですか?
104 f#  recursion  ocaml 


30
再帰的にJavaでリンクリストを逆にする
私はしばらくの間、クラスのJavaプロジェクトに取り組んでいます。これは、リンクリストの実装です(ここではと呼ばれAddressList、と呼ばれる単純なノードを含みますListNode)。問題は、すべてを再帰的アルゴリズムで実行する必要があることです。私は1つの方法ではなくすべてをうまく行うことができました:public AddressList reverse() ListNode: public class ListNode{ public String data; public ListNode next; } 現在、私のreverse関数は、再帰を許可する引数を取るヘルパー関数を呼び出すだけです。 public AddressList reverse(){ return new AddressList(this.reverse(this.head)); } 私のヘルパー関数にはの署名がありprivate ListNode reverse(ListNode current)ます。 現時点では、スタックを使用して繰り返し作業していますが、これは仕様に必要なものではありません。再帰的に逆にして手動でJavaコードに変換するアルゴリズムをCで見つけましたが、うまくいきましたが、理解できませんでした。 編集:気にしないで、それまでの間、それを理解しました。 private AddressList reverse(ListNode current, AddressList reversedList){ if(current == null) return reversedList; reversedList.addToFront(current.getData()); return this.reverse(current.getNext(), reversedList); } 私がここにいる間、誰かがこのルートに問題を感じていますか?

11
一連の親子関係を階層ツリーに変換しますか?
名前と親の名前のペアがたくさんあるので、できるだけ階層的なツリー構造に変えたいと思います。したがって、たとえば、これらはペアリングである可能性があります: Child : Parent H : G F : G G : D E : D A : E B : C C : E D : NULL これを(a)階層ツリーに変換する必要があります。 D ├── E │ ├── A │ │ └── B │ └── C └── G ├── F └── H 必要な最終結果は、<ul>それぞれ<li>が子の名前を含む、ネストされた要素のセットです。 ペアリングに不整合はありません(子はそれ自体の親、親は子の子など)。したがって、多くの最適化を行うことができます。 …
100 php  recursion  tree 

6
無限再帰エラーなしで__getattribute__を実装するにはどうすればよいですか?
クラス内の1つの変数へのアクセスをオーバーライドしたいが、他のすべての変数は通常どおりに戻したい。どうすればこれを達成でき__getattribute__ますか? 私は次のことを試しました(これも私がやろうとしていることを示しています)が、再帰エラーが発生します。 class D(object): def __init__(self): self.test=20 self.test2=21 def __getattribute__(self,name): if name=='test': return 0. else: return self.__dict__[name] >>> print D().test 0.0 >>> print D().test2 ... RuntimeError: maximum recursion depth exceeded in cmp
100 python  class  oop  recursion  getattr 

5
再帰的な自己結合を行う最も簡単な方法は?
SQL Serverで再帰的な自己結合を行う最も簡単な方法は何ですか?私はこのようなテーブルを持っています: PersonID | Initials | ParentID 1 CJ NULL 2 EB 1 3 MB 1 4 SW 2 5 YT NULL 6 IS 5 また、特定の人から始まる階層にのみ関連するレコードを取得できるようにしたいと考えています。したがって、PersonID = 1でCJの階層を要求した場合、次のようになります。 PersonID | Initials | ParentID 1 CJ NULL 2 EB 1 3 MB 1 4 SW 2 そしてEBのために私は得るでしょう: PersonID | Initials | …

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