次の数字は前の2つの数字の合計です。黄金比や私たちの周りの多くの自然現象に関連しています。関数は速くあるべきです。呼び出しは1秒より小さくある必要があります。解答ここでトライする最初の解法は再帰的なものです。大きな値だととても遅いです。すべてのCPUリソースを食べるのでエンジンがハングアップするかもしれません。それは、関数があまりにも多くのサブコールを作るためです。同じ値が何度も何度も再評価されます。両方で必要とされていることが分かります。2回完全に独立して呼び出され、評価されます。3回評価されることが明確にわかります。一度呼ばれると、以降の将来の計算では単にそれを再利用させます。別のバリアントとしては、再帰をやめ、全く異なるループベースのアルゴリズムを使うことです。開始するループを作ることができます。必要な値を取得するまで上に上がっていきます。各ステップでは以前の2つの値を覚えておくだけで済みます。ここでは、新しいアルゴリズムのステップの詳細を示します。5*/...として必要な値まで繰り返します。これは再帰よりも遥かに速く、重複する計算を起こしません。ハードコードされているためです。bottom-up)と呼ばれます。説明の通り)を持っています。ループを使った方法と再帰を利用した方法。使用していることに留意してください。}}...しかし、それは賢くありません。将来、リストに何かをするよう、関数を拡張する必要があるかもしれません。変えると、このような能力を失います。ここではリスト自身です。それはそのままでいるべきです。それは明らかで信頼できるものです。ように、排他的なリストのトラバーサルです。対して同じことをします。}}printList(list);さて、何がベターでしょう?技術的には、ループはより効率的です。これらの2つのバリアントは同じことをしますが、ループは入れ子の関数呼び出しのためのリソースを消費しません。別の観点では、再帰のバリアントはより短く、理解しやすい場合があります。単一の連結リストを逆順で出力してください。2つの解法を作ってください。ループと再帰を使った方法です。再帰を利用した方法ここでは、再帰ロジックは少しトリッキーです。alert(list.value);}printReverseList(list);ループを使うループを使うループのバリアントもまた直接出力よりも少し複雑です。最後の値を取得する方法はありません。従って、できることは直接の並びでアイテムを調べて、それらを配列に覚えます。逆順で覚えていることを出力していきます。}}printReverseList(list);再帰的な解法は、実際には全くに同じであることに留意してください。リストに沿って、(実行コンテキストスタック内の)ネストされた呼び出しのチェーン内の項目を覚え、それらを出力します。前のレッスン次のレッスンシェアチュートリアルマップコメントコメントをする前に読んでください...自由に記事への追加や質問を投稿をしたり、それらに回答してください。タグを使ってください。codepen...)。記事の中で理解できないことがあれば、詳しく説明してください。Kantorプロジェクトについてコンタクト。