gpt4 book ai didi

JavaScript 递归

转载 作者:行者123 更新时间:2023-11-30 06:58:07 28 4
gpt4 key购买 nike

有人愿意用通俗易懂的语言逐步解释这个程序(取自书籍教程)以帮助我理解递归吗?

var reverseArray = function(x,indx,str) {
return indx == 0 ? str : reverseArray(x, --indx, (str+= " " + x[indx]));;
}

var arr = new Array('apple', 'orange', 'peach', 'lime');
var str = reverseArray(arr,arr.length,"");
alert(str);

var arr2 = ['car','boat','sun','computer'];
str = reverseArray(arr2,arr2.length."");
alert(str);

最佳答案

当然可以,但这样写可能更容易阅读:

var reverseArray = function(x,indx,str) {
if (indx === 0) { // Termination condition
return str; // return default
} else {
return reverseArray(x, --indx, str + " " + x[indx]); // recur on x, reduce indx, update default
}
}

递归只是一个函数调用自身,对吧?重要的是阻止函数永远调用自身的终止条件。在这种情况下就是这一行:

if (indx === 0)…

只要 indx 不为 0,该函数将继续使用更新的参数调用自身。后续调用做同样的事情,但最终产品 str 包含从父调用传递给 reverseArray 的值。最终 indx 达到零,str 的值是从父级传递给子级的组合值。这就是该行返回的内容:

return str; // ' lime peach orange apple'

它被返回给它的父级,它的父级将它返回给它的父级等等,直到到达最顶层的框架。

arr = new Array('apple', 'orange', 'peach', 'lime');
reverseArray(arr,arr.length,""); // ['apple', 'orange', 'peach', 'lime'], 4, ""
+['apple', 'orange', 'peach', 'lime'], 3, "" + " " + x[3] = " lime";
++['apple', 'orange', 'peach', 'lime'], 2, " lime" + " " + x[2] = " lime peach";
+++['apple', 'orange', 'peach', 'lime'], 1, " lime peach" + " " + x[1] = " lime peach orange";
++++['apple', 'orange', 'peach', 'lime'], 0, " lime peach orange" + " " + x[0] = " lime peach orange apple"; // indx == 0, so this string returns

关于JavaScript 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164039/

28 4 0
文章推荐: php - 如何 chop div中的文本
文章推荐: Java:Stringtokenizer 到数组
文章推荐: java - 比较器因给定的测试数据而失败 - 为什么?
文章推荐: javascript - jQuery 隐藏其他