javascript - 需要更好地理解这段代码

标签 javascript html css math recursion

我正在阅读一本 JavaScript 书籍,我是新手,所以我学习了递归部分,我了解了递归的工作原理,但对我来说这部分并不难,是数学部分。

这是代码:

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

}

假设我将 50 作为值传递给函数 right

isEven(50);

这给了我真的...为什么 50 == 0 是真的或 75 == 1 是假的...我真的不明白。

最佳答案

当您将 50 传递给此函数时,它会转到最后一个 block (else) 并递归执行。当你写return isEven(n - 2);时,你执行isEven(48),然后下一次isEven(46)和以此类推,直到到达 isEven(0)

这会调用第一个 if block ,您会得到 true 作为输出。 trueisEven(0) 返回,后跟 isEven(2) (因为当您执行 isEven(2) 你最终会去 return isEven(0)),这会在堆栈中冒泡,最终将 isEven(50) 的输出返回为 true.

关于javascript - 需要更好地理解这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291867/

相关文章:

javascript - 套接字获取文本字符串作为十六进制数组,多个套接字在彼此的事件中调用

javascript - 将 &lt;input type ="time"> 值(作为持续时间)转换为 JS/PHP 小时 float

javascript - 动态添加html内容到页面

javascript - 如何使用 d3 扩展 select 标签中的选项数量?

php - 使用 PHP 按列搜索 CSV?

html - 具有 "white-space: normal"的内联 block div 超出具有 "white-space: nowrap"的父级的宽度

javascript - 如何在 JavaScript 中将 MSSQL 日期时间整数转换为 YYYY/mm/DD 格式

javascript - 手机网站分享按钮调用iOS/Android系统分享对话框

jquery - 在 Bootstrap 模式 (CSS) 中显示电子邮件正文

javascript - 当页面略长于页面高度时,如何制作一个没有奇怪滚动故障的动态粘性工具栏?