有人可以澄清这个函数中的递归步骤,找到字符串的所有可能的排列吗?

时间:2015-08-09 22:34:39

标签: recursion permutation

这不是我的代码,而是来自其他地方:

var permutations = [];
function doPerm(str, arr) {
if (typeof (str) == 'string') str = str.split('');
if (str.length == 0) permutations.push(arr.join(''));
for (var i = 0; i < str.length; i++) {
    var x = str.splice(i, 1); 
    arr.push(x); 
    doPerm(str, arr);
    arr.pop(); 
    str.splice(i, 0, x); 
}

我理解代码背后的算法,但我似乎无法跟踪递归背后发生的事情。如果有人用一个简单的例子画了一棵树,那将会有很大帮助:str =&#39; abc&#39;

1 个答案:

答案 0 :(得分:0)

递归只是一遍又一遍地使用算法来实现所需的结果。在这种情况下,您正在调用doPerm修改str,将其放在arr中,然后该函数调用自身来计算下一个排列。

有一篇非常好的文章解释了递归here