我认为这是一个简单的问题。为什么我需要最后一个return语句?在我得到我想要的答案之前,我反复调用函数的递归背后的想法不是,然后我返回一个值吗?
// Your code here. this does work
function isEven(num) {
if (num == 0) return true;
else if (num == 1) return false;
else return isEven(num - 2);
}
// Your code here. This does not work
function isEven(num) {
if (num == 0) return true;
else if (num == 1) return false;
else isEven(num - 2);
}
答案 0 :(得分:2)
在你的第二个片段中也会发生递归,如果你想将递归调用的值返回给调用者,那么你需要返回它的值。
假设您正在调用isEven(3)
,现在通过调用isEvent(3-2)
来评估else部分,现在第二个调用返回false,但是从第一次调用开始就不返回{{1}返回的值初始调用者将获得isEven(1)
作为答案。
答案 1 :(得分:0)
我不是反复调用函数的递归背后的想法 直到我得到我想要的答案,然后我返回一个值?
是的,你是对的。但是,如果你没有首先使用return,那么当你的递归开始时,你最终都不会返回任何内容,即使子函数确实返回了某些东西。
您可以通过此代码演示您所做的事情:
function f1() {
f2();
}
function f2() {
return "2";
}
调用f1()不会返回f2的值。因为它不是那样写的。
答案 2 :(得分:0)
我会尝试在一个生活中解释它,这对我来说听起来不错。如果不是,请告诉我。
想象一下无限的人,从1到无穷大
此外,还有一位经理带着一堆空文件 - 他的名字是Main
:
Main
0 1 2 3 4 5 6 7 8 9 10 11 ...
他们的工作方式如下:Main
只是向不同的人提供空白论文。如果小伙伴0
得到了论文,他会在其上写下“真实”并将其返回给某人,他刚刚给了他这篇论文 - 无论是Main
还是右边两个位置的人。 Guy 1
做同样的事,但写“假”。所有其他人都不知道该写什么,所以他们只是将这篇论文传递给左边两个位置的人,当他们得到答案时 - 他们将本文转发给原始发件人
现在,您向
5
提交一份空白纸 - 他将此文件传递给3
,然后将其传递给1
。1
将“false”和返回纸张写入前一位所有者 -3
。3
将带有珍惜的“假”的论文归还给5
。5
,又将其返回给原始发件人 -Main
。
这正是这种递归的作用。调用正确的isEven(5)
将返回false
。
如果您从第return
行删除else return isEven(num - 2);
,则会变为以下内容:
Main
向5
提供了一张空白纸 - 他将此文件传递给3
,然后将其传递给1
。1
写入“false”并将其返回给3
,但是3
只是对它做了什么。它点头,接收纸张并将其扔进垃圾桶。他不会返回这个人5
,而且没关系,因为小伙伴5
并不期待它。他只是将论文传递给3
而忘了 - 调用了函数,但没有存储或返回结果。该行中的每个人都不需要这篇论文回去。最后,Main
一无所获。他的论文在回来的路上丢失了。
因此,使用0或1以外的所有内容调用错误的isEven()
将返回undefined
。