使用递归的JavaScript排列

问题描述 投票:0回答:1

我知道我的具体问题在互联网上有很多解决方案,但我一直试图以特定的方式解决它,它不起作用,我真的无法理解什么是错的。在我的情况下,我只想打印排列。这是我的代码:

a = "abc";


function f7(a, b) {



  //document.write("str: "+a+" b:"+b+"<br>");
  if (b.length == 2) {
    perm = b + a;
    return perm;
  }

  var c = [];
  var str = [];

  for (i = 0; i < a.length; i++) {

    c[i] = b + a.charAt(i);
    str[i] = a.substring(0, i) + a.substring(i + 1);

    document.write("i: " + i + " c[i]: " + c[i] + " str[i]: " + str[i] + "<br>");

    return f7(str[i], c[i]);


  }


  //return {str,c}

}


document.write(f7(a, ""));

//g=f7(a,""); 
//document.write(g.str+"<br>");
//document.write(g.c+"<br>");

上面的代码并没有超出第一个排列,我无法理解为什么。提前感谢任何建议

javascript recursion permutation
1个回答
1
投票

在循环中返回值会导致循环转义。您将返回for语句中的值,该语句在循环完成之前立即停止。

您可以使用临时变量在for循环中保存值,然后返回它。

a = "abc";


function f7(a, b) {
  //document.write("str: "+a+" b:"+b+"<br>");
  if (b.length == 2) {
    perm = b + a;
    return perm;
  }

  var c = [];
  var str = [];
  var temp = '';

  for (i = 0; i < a.length; i++) {
    c[i] = b + a.charAt(i);
    str[i] = a.substring(0, i) + a.substring(i + 1);

    document.write("i: " + i + " c[i]: " + c[i] + " str[i]: " + str[i] + "<br>");

    temp += f7(str[i], c[i]);
  }

  return temp
}


document.write(f7(a, ""));

//g=f7(a,""); 
//document.write(g.str+"<br>");
//document.write(g.c+"<br>");
© www.soinside.com 2019 - 2024. All rights reserved.