es 6関数の最後の再帰用法の実例分析
この論文の実例は、es 6関数の最後の再帰的用法を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
関数が自身を呼び出して再帰と呼び、尾が自身を呼び出したら、それを再帰と呼びます。
再帰的にメモリが非常に消費されます。何千もの呼び出しフレームを同時に保存する必要があるので、スタックオーバーフローエラーが発生しやすいです。しかし、最終再帰的には、呼び出しフレームが一つしか存在しないため、「スタックオーバーフロー」エラーは永遠に発生しない。
列は次のように実装されます。
関数式プログラミングには、複数パラメータの関数を単一パラメータに変換するという概念があります。ここでコリ化ができます。
もっと多くのJavaScriptに関する内容は当駅のテーマを調べられます。「JavaScript常用関数技術のまとめ」、「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。
関数が自身を呼び出して再帰と呼び、尾が自身を呼び出したら、それを再帰と呼びます。
再帰的にメモリが非常に消費されます。何千もの呼び出しフレームを同時に保存する必要があるので、スタックオーバーフローエラーが発生しやすいです。しかし、最終再帰的には、呼び出しフレームが一つしか存在しないため、「スタックオーバーフロー」エラーは永遠に発生しない。
function factorial(n) {
if (n === 1) return 1
return n * factorial(n - 1)
}
最後の再帰に変更した場合は、呼び出し記録だけを保持します。複雑度O(1)
function factorial(n, total = 1) {
if (n === 1) return total
return factorial(n - 1, n * total)
}
factorial(5)
非後戻りのFibonacci数列は以下の通り実現される。
function Fibonacci (n) {
if ( n <= 1 ) {return 1};
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
Fibonacci(10) // 89
Fibonacci(100) //
Fibonacci(500) //
最後に再帰的に最適化したFibonacci数列は次のように実装されます。
function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {
if( n <= 1 ) {return ac2};
return Fibonacci2 (n - 1, ac2, ac1 + ac2);
}
Fibonacci2(100) // 573147844013817200000
Fibonacci2(1000) // 7.0330367711422765e+208
Fibonacci2(10000) // Infinity
再帰的な実装は、再帰関数を書き換える必要があり、最後のステップは自分自身だけで呼び出されるようにする。このようにする方法は、使用する内部変数をすべて関数のパラメータに書き換えることです。関数式プログラミングには、複数パラメータの関数を単一パラメータに変換するという概念があります。ここでコリ化ができます。
function currying(fn, n) {
return function(m) {
return fn.call(this, m, n)
}
}
興味のある友達はオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます。http://tools.jb51.net/code/HtmlJsRun上記コードの運行効果をテストします。もっと多くのJavaScriptに関する内容は当駅のテーマを調べられます。「JavaScript常用関数技術のまとめ」、「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。