首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript函数'return‘值?

JavaScript函数'return‘值?
EN

Stack Overflow用户
提问于 2016-01-20 15:06:10
回答 5查看 89关注 0票数 0

谁能给我解释一下为什么下面的递归函数的最终返回值是正确的?

代码语言:javascript
复制
function(factorial) {
  if (n == 0) 
    return 1;
return n * factorial (n -1);
}

我理解递归,但我不明白为什么返回值是正确的结果,而不只是1..如果我将return更改为2,那么它只是将factorial的结果加倍。似乎无论我在返回表达式中放入什么值,都会变成阶乘function..Why的累加结果的乘数,是这样吗?阶乘函数的累加结果是如何存储的?感谢所有回复

EN

回答 5

Stack Overflow用户

发布于 2016-01-20 15:14:46

只需像这样对方法执行dry-run操作

代码语言:javascript
复制
function factorial (n) { //line 1
  if (n == 0) //line 2
    return 1;//line 3
return n * factorial (n -1);//line 4
}

比方说n = 3,当factorial(3)被调用时,它将经历4递归(factorial(n)的函数调用)

递归1 n= 3,第2行条件失败,因此转到第4行并返回3 * factorial(2)

递归2 n= 2,第2行条件失败,因此转到第4行并返回2 * factorial(1)

递归3 n= 1,第2行条件失败,因此转到第4行并返回1 * factorial(0)

递归4 n= 0,第二行条件现在成功了,所以它转到第三行并返回1。现在,它将返回到递归3中的函数调用,并用1 * 1替换1 * factorial(0),最后在返回到第一个递归调用时返回3 * 2 * 1 * 1,并返回单个值。

这意味着如果你在第2行返回2,那么所有内容都会与2相乘。

很简单,不是吗?)

票数 3
EN

Stack Overflow用户

发布于 2016-01-20 15:39:58

您可以简单地展开一个factorial(5)

  • factorial(5)
  • factorial(5) = 5 * factorial(4)
  • factorial(5) = 5 * 4 * factorial(3)
  • factorial(5) = 5 * 4 * 3 * factorial(2)
  • factorial(5) = 5 * 4 * 3 * 2 * factorial(1)
  • factorial(5) = 5 * 4 * 3 * 2 * 1 * factorial(0)
  • factorial(5) = 5 * 4 * 3 * 2 * 1 * 1
票数 3
EN

Stack Overflow用户

发布于 2016-01-20 15:15:34

假设输入为5,那么第一个函数调用的最终结果将如下所示:

根据@gurvinder372的评论编辑:

代码语言:javascript
复制
return 5*(return 4 * ( return 3 * (return 2 * ( return 1 * ( return 1)))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34893555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档