再帰

再帰は、私の心が受け入れるのに苦労したことの1つでした。関数がそれ自体を呼び出すことができるとはどういう意味ですか?何?マインドブロー!コンピュータサイエンスの再帰は、ウィキペディアから次のように定義されています。

'再帰は、解決策が同じ問題のより小さなインスタンスの解決策に依存する問題を解決する方法です。このような問題は通常、反復によって解決できますが、プログラミング時に小さなインスタンスを識別してインデックスを作成する必要があります。再帰は、独自のコード内から自分自身を呼び出す関数を使用することにより、このような再帰的な問題を解決します。

再帰はコンピュータサイエンスの中心的なアイデアの1つですが、アルゴリズムではさらに重要です。この記事では、アルゴリズムに関連する再帰について説明します。アルゴリズムを解決するには、通常、反復または再帰の2つの方法があります。再帰は、Domトラバーサルアルゴリズム、オブジェクト/ハッシュトラバーサル、深さ優先検索トラバーサル(DFS)、幅優先検索トラバーサル(BFS)などで使用されます。

コールスタック:

UnsplashのBrigitteTohmによる写真

再帰は、コールスタックと呼ばれるものを使用します。関数がそれ自体を呼び出すと、それはスタックに入り、再帰がベースケースにヒットすると、一度に1つずつスタックから飛び出します。スタックは、後入れ先出し(LIFO)を使用するデータ構造です。それはスタッキングプレートに似ています、それらを取り除くとき、あなたはそれを上から取らなければなりません。

規範事例:

これまでに経験したことがない場合の恐ろしいことの1つは、無限ループに入り、それを閉じる方法がわからないことです。これに関連するもう1つの恐ろしいことは、スタックオーバーフローです。何が起こるかというと、関数はそれ自体を呼び出し続け、それ自体の呼び出しを停止することはありません!プロのヒント:ctrlcを押します。過度のメモリ使用量が原因で、コンピュータプログラムでスタックオーバーフローエラーが発生する可能性があります。この過剰なメモリ使用量は、プログラム内のアクティブなサブルーチンに関連する情報が格納されるコールスタックで発生します。コールスタックで使用できるメモリの量は限られています。そのサイズは、プログラミング言語、アーキテクチャ、CPUでマルチスレッドが使用可能かどうか、および使用可能なメモリの量によって決まります。それはさておき、再帰関数にベースケースがない場合は、スタックオーバーフローエラーが発生します。stackoverflow.comでその意味を確認してください。基本的なケースは、通話が終了/停止する場合と考えることができます。ベースケースに到達した後、最初の関数呼び出しに戻るまで逆方向に作業できます。

再帰を使用するアルゴ

どのような質問が再帰的に解決されるかを調べてみましょう。よく使われるのはフィボナッチ数列で、シーケンス内の各数値はその前にある2つの数値の合計です。したがって、シーケンスは次のようになります:0、1、1、2、3、5、8、13、21、34など。n番目のフィボナッチ数を解くように求められる場合があり、再帰を使用してこの問題を解くことができます。

フィボナッチ数列


function fib(n){
  if (n <= 2) return 1;
  return fib(n-1) + fib(n-2);
}
console.log(fib(10))

function reverse(str){
 if(str.length <= 1) return str;
 return reverse(str.slice(1)) + str[0];
}
// reverse('awesome') // 'emosewa'

提案された投稿

私が最もよく使用するコーディング リソース

私が最もよく使用するコーディング リソース

今週、毎日のメールリストのメンバーからメールを受け取りました。彼らは次のことを知りたかったのです。毎日、毎週、毎月どのリソースにアクセスしていますか? 素晴らしい質問です!私のワークフローと使用している主なリソースについての洞察を共有したいと思います。

ハイパーモダンなターミナル ツールボックス

ハイパーモダンなターミナル ツールボックス

ターミナル、シェル、コマンドライン ツールが 2023 年の標準を設定します。すべての開発者はターミナルを使用します。ワークフロー全体がターミナルである人もいます この投稿では、ハイパーモダン ターミナル ツールボックスを紹介します — ターミナル、シェル、コマンドライン ツールが 2023 年の標準を設定します ターミナル エミュレータとしての Kitty Kitty はターミナル エミュレータです — それは GNOME ターミナルの代替品です、Alacritty または Windows ターミナル。

関連記事

その脅威アーカイブ: Vol 7 ブラックバスタ

その脅威アーカイブ: Vol 7 ブラックバスタ

今日の相互接続された世界では、サイバー攻撃の脅威がかつてないほど蔓延しています。サイバー犯罪者や国家主体は常に脆弱性を悪用して貴重なデータを盗もうとしており、あらゆる規模の組織に重大なリスクをもたらしています。

無限の命

大人になると、世界はそういうもので、あなたの人生はただ世界の中で生きていくだけで、決して命を危険にさらすことはなく、決められた道をたどって最後には死ぬだけで、失敗しないように努めるのだと言われがちです。壁を打ちすぎてはいけません。しかし、それは非常に限られた人生です。

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

はじめに:勇敢な読者の皆さん、地球の最も暗い深みへ私たちを導く旅へようこそ。このブログでは、マリアナ海溝の謎に満ちた世界を掘り下げ、その隠された秘密を明らかにし、その表面の下にある骨も凍るような真実を明らかにします。

デザインに 2 年 - 良い点、悪い点、そして醜い点…

デザインに 2 年 - 良い点、悪い点、そして醜い点…

「Hey Siri、オリビア・ディーンの『ミー・ダイブ』をかけて」私がナイジェリアのアクレにあるフューチャー アカデミー アフリカでインターンシップを始めたのは、2021 年 5 月のことでした。