私は再帰を練習しています。概念的には、これがどのように機能すべきかを理解していますが(下記参照)、コードは機能しません。Javascript再帰?
私が間違っていることを教えてください。そして、コードの各ステップとその動作を説明してください。明確な説明は、私に働くコードを与えるより10倍優れています。
/*
buildList(0, 5) == buildList(0, 5 - 1) // [0]
buildList(0, 4) == buildList(0, 4 - 1) // [0,0]
buildList(0, 3) == buildList(0, 3 - 1) // [0,0,0]
buildList(0, 2) == buildList(0, 2 - 1) // [0,0,0,0]
buildList(0, 1) == buildList(0, 1 - 1) // [0,0,0,0,0]
*/
var buildList = function(value, length) {
var result = [];
if (length === 0) {
return result;
}
result.push(value);
return buildList(result.push(value), length - 1);
};
buildList(0, 5);
概念レベルでの再帰の仕組みを理解しています。
ありがとうございました! – spaceDog
@spaceDog:代替バージョン内の再帰呼び出しも末尾にあります。つまり、ES2015準拠のエンジンはこの呼び出しを最適化できます(テールコール最適化)。結果として、代替バージョンは命令的ループと同じくらい速くなります。 – rand
@Iven私はパフォーマンスについては考えていませんでした(なぜなら、ループや '[.fill'が良いでしょう)。しかし、良い点です。 [②ality](http://www.2ality.com/2015/06/tail-call-optimization.html)には、テールコールの最適化に関する素晴らしい記事があります。 – Oriol