这不是我的代码,而是来自其他地方:
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;
答案 0 :(得分:0)
递归只是一遍又一遍地使用算法来实现所需的结果。在这种情况下,您正在调用doPerm
修改str
,将其放在arr
中,然后该函数调用自身来计算下一个排列。
有一篇非常好的文章解释了递归here。