isEven递归需要return语句吗?

时间:2015-11-12 03:47:08

标签: javascript recursion return

我认为这是一个简单的问题。为什么我需要最后一个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);
}

3 个答案:

答案 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,然后将其传递给11将“false”和返回纸张写入前一位所有者 - 33将带有珍惜的“假”的论文归还给55,又将其返回给原始发件人 - Main

这正是这种递归的作用。调用正确的isEven(5)将返回false

如果您从第return行删除else return isEven(num - 2);,则会变为以下内容:

  

Main5提供了一张空白纸 - 他将此文件传递给3,然后将其传递给11写入“false”并将其返回给3,但是3只是对它做了什么。它点头,接收纸张并将其扔进垃圾桶。他不会返回这个人5,而且没关系,因为小伙伴5并不期待它。他只是将论文传递给3而忘了 - 调用了函数,但没有存储或返回结果。该行中的每个人都不需要这篇论文回去。最后,Main一无所获。他的论文在回来的路上丢失了。

因此,使用0或1以外的所有内容调用错误的isEven()将返回undefined