如何解决在计算阶乘时为什么这种递归方法不起作用?
谁能帮我理解为什么下面的代码工作正常
作品:
def factorial(n)
return 1 if n == 1
n * factorial(n-1)
end
puts factorial(5)
但是当我像这样重构它时,它抛出一个异常:*': nil can't be coerced into Integer (TypeError)
失败:
def factorial(n)
puts n
n * factorial(n-1) unless n == 1
end
factorial(5)
作品:
def count_down(number)
puts number
count_down(number - 1) unless number == 0
end
count_down(10)
解决方法
这段代码工作正常,并且以类似的方式编写
不,不是。您的 count_down
根本不相似,因为它不返回值。
但是您的 factorial
确实返回了一个值,并且每次递归调用都使用该值。
好吧,您的第二个示例没有说明当 n
为 1 时要返回什么,因此它返回 nil
并且调用堆栈崩溃了。
您的第一个示例确实说明了当 n
为 1 时要返回的内容。这就是区别。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。