【问题标题】:Recursion function javaScript [duplicate]递归函数javaScript [重复]
【发布时间】:2021-10-19 18:18:27
【问题描述】:

我尝试编写此函数来猜测给定数字是否为偶数,使用递归, 这是我的代码:

function isEven(N){
    if(N===0){
        return true;
    }else if(N===1){
        return false;
    }else {
            
        isEven(N-2);
    }       
}

console.log(isEven(1)); // gives false
console.log(isEven(0)); //gives true
console.log(isEven(10)); // gives undefined

我不知道为什么这个函数除了0和1都不起作用。

【问题讨论】:

  • 您在isEven(N-2) 之前忘记了return 声明
  • 欢迎来到 SO!为什么不n % 2 === 0?我知道递归被误用于教学目的,但这超出了我的理解。除了给出的解决方案(在所有情况下都使用return),这将在负数上破坏堆栈。
  • @ggorlen:它也会以相对较小的正数破坏堆栈,但正如您所指出的,重点是完全教学法。从这里开始,我们可以做一些简单的改变来演示一个相互递归的解决方案(const isOdd = (n) => n < 1 ? false : isEven (n -1) 等)。演示相互递归的威力并不总是那么容易,但是这个通常是立即清晰的。
  • @ScottSauyet 好点,是的,这对正数也几乎没有用。我可能已经使用了 2-3 次相互递归。完全教学示例的问题在于,整个课程“完全是教学”,学生最终不知道将哪个工具应用于哪个问题,这几乎是成为一名成功程序员的 95%。不是对你咆哮,我相信你知道,但 recursion 标签上满是倒霉的学生,他们试图用螺丝刀砸钉子,因为他们必须......
  • @ggorlen:我们的经历完全不同。我发现自己在日常的 JS 编码中经常使用递归。它通常是解决方案的最简单、最易理解的版本;如果它对我的任务表现不佳,我会稍后重构。虽然相互递归不太常见,但它远非罕见。我同意程序员的教育应该旨在展示学生需要的工具和技术,但如果他们帮助展示这些技术,我对这样的作业没有任何问题。不,我没有感觉到针对我的咆哮,我希望你也不会。只是不同的体验。

标签: javascript recursion


【解决方案1】:

因为 isEven() 函数进入一个循环并且不能向输出发送任何内容。尝试更改您的功能并以其他方式编写它

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-02-19
    • 2017-05-07
    • 2015-03-04
    相关资源
    最近更新 更多