JavaScript 递归

标签 javascript recursion

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

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/

相关文章:

javascript - 根据用户输入在 Highcharts 中添加系列

javascript - Select2 4 自定义数据适配器

php - 展平 php 数组并连接索引

c - 递归计数

javascript - Angular/ Jasmine : Error: Expected spy to have been called

javascript - 通过 Javascript 计算数组中排列的计数而不重复

c# - 围绕着 N 个父-> 子关联

c# - 在 C# 中使用递归

javascript - 瘦客户端和胖客户端之间的通信

javascript - 使用 JavaScript 中的递归查找嵌套数组中最长的字符串?