使用递归的JavaScript排列

时间:2019-03-02 06:22:02

标签: javascript recursion permutation

我知道互联网上针对我的特定问题有很多解决方案,但是我一直在尝试以特定的方式解决它,但是它不起作用,我真的不明白哪里出了问题。 就我而言,我只是想打印排列。 这是我的代码:

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>");

上面的代码没有超出第一个排列范围,我不明白为什么。 预先感谢您的任何建议

1 个答案:

答案 0 :(得分: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>");