繁体   English   中英

(Javascript)递归 function 在第一次调用时有效,但在第二次调用时无效

[英](Javascript) Recursive function that works on first call but not on second When Oscillating numbers

我正在尝试通过在 Javascript 上使用 Recursion 对振荡数进行迭代,但不幸的是它没有得到预期的 output。第一次调用有效,但第二次调用失败。 这是代码:

 let result = []; function oscillator(A) { if (result[result.length - 1] == A) { // base case return result; } let number = A; if (number > 0) { number -= 5; result.push(number); } else { number += 5; result.push(number); } return oscillator(number); } console.log(oscillator(16));

显示的结果只是[ 11 ]当预期的 output 应该是: 16 11 6 1 -4 1 6 11 16

应该改变什么

从该代码中,递归的基本情况应更改为:

if (base == 0) {
  base = A;
} else if (A == base) {
  return result;
}

完整代码

 let result = []; var base = 0; var dirDown = true; function oscillator(A) { // need to set the condition to check if the base case is number is reached. if (base == 0) { base = A; } else if (A == base) { return result; } // Push the number into result result.push(A); let number = A; if ((number > 0) && dirDown) { number -= 5; } else { // set dirDown to false to prevent the number keep looping in -4 and 1 dirDown = false; number += 5; } return oscillator(number); } console.log(oscillator(16));

结果

如果运行上面的代码片段,您将看到以下结果:

[16, 11, 6, 1, -4, 1, 6, 11]

感谢整理代码

在代码中添加了一些注释以进行解释

JS小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM