javascript 不断练习递归函数失败

hrysbysz  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(161)

我已经看了无数的例子,我不知道我一直做错了什么。我想做一个函数,打印一个10的乘法表(1x10到10x10),但我一直得到超过最大调用堆栈大小的错误,而其他人写的类似函数看起来一样运行没有问题。有人能帮助我吗?我发现递归真的很难理解。
'

recursionTable = (multiplier) => {
    let num = 1;

    if (num === 10) {
        return "We've hit the end, my friends."
    }
    return (num + 1) * recursionTable(multiplier);
}

console.log(recursionTable(10));

'
期望通过递归得到一个10的乘法表(从1x10到10x10),但是在看了几个小时的例子之后,即使我模仿那些,似乎也没有什么效果。

0h4hbjxa

0h4hbjxa1#

您正在传递没有起始条件的乘数。下面的代码可以解决您的问题:

recursionTable = (multiplier, num) => {

    if (num === 10) {
        return "We've hit the end, my friends."
    }
    else {
      console.log(num * multiplier);
    }
    return recursionTable(multiplier, num + 1);
}

let num = 1;
console.log(recursionTable(10, num));
yqkkidmi

yqkkidmi2#

你的代码的问题是你在每次递归时都设置num = 1,为了防止这种情况,你应该像这样重构你的代码:

recursionTable = (multiplier) => {
  if (num === 10) {
    return "We've hit the end, my friends."
  }

  num += 1;
  return num * recursionTable(multiplier);
}

let num = 1;

或者发送2个值作为函数中的参数

recursionTable = (multiplier, initValue) => {}

并将内部num值替换为initValue

hzbexzde

hzbexzde3#

谢谢大家的帮助!我开始掌握它的窍门了。结果就像你们中的一些人指出的那样,我甚至没有包括递归的公式来做任何事情。现在它工作了,我已经读了一遍,它真的开始有意义了。再次感谢!
代码我最终使用:

recursionTable = (num, multi) => {
  if (num === 11) {
    return "We've hit the end of the recursion table.";
  } else {
    console.log(`${num} x ${multi} = ${num * multi}`);
  }
  return recursionTable(num + 1, multi);
};

let num = 1;
console.log(recursionTable(num, 10));

/*
1 x 10 = 10
2 x 10 = 20
3 x 10 = 30
4 x 10 = 40
5 x 10 = 50
6 x 10 = 60
7 x 10 = 70
8 x 10 = 80
9 x 10 = 90
10 x 10 = 100
We've hit the end of the recursion table 
*/
kmpatx3s

kmpatx3s4#

试试这个:

function recursionTable(multiplier, num) {
  

  if (num === 10) {
    return "We've hit the end, my friends.";
  }

  console.log(`${num} x ${multiplier} = ${num * multiplier}`);

  return recursionTable(multiplier, num + 1);
}

let num = 1;
console.log(recursionTable(10, num));

相关问题