首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在计算阶乘时,为什么这种递归方法不起作用?

在计算阶乘时,为什么这种递归方法不起作用?
EN

Stack Overflow用户
提问于 2021-03-02 06:58:29
回答 1查看 34关注 0票数 -1

有没有人能帮我解释一下为什么下面的代码运行得很好?

作品:

代码语言:javascript
复制
def factorial(n)
  return 1 if n == 1

  n * factorial(n-1)
end

puts factorial(5)

但是当我像这样重构它时,它抛出了一个异常:

*

':不能将nil强制转换为整数(TypeError)

失败:

代码语言:javascript
复制
def factorial(n)
  puts n

  n * factorial(n-1) unless n == 1
end

factorial(5)

作为另一个示例,此代码运行良好,并且以类似的方式编写:

作品:

代码语言:javascript
复制
def count_down(number)
  puts number

  count_down(number - 1) unless number == 0
end

count_down(10)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 07:19:37

这段代码运行良好,并且以类似的方式编写

不,不是。你的

一点也不相似,因为它不返回值。

但是你的

返回一个值,每次递归调用都使用该值。

那么,您的第二个示例并没有说明在以下情况下应该返回什么

为1,因此它返回

调用堆栈就崩溃了。

您的第一个示例说明了在执行以下操作时返回的内容

是1。这就是不同之处。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66430897

复制
相关文章

相似问题

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