问题描述
谁能帮我理解为什么下面的代码工作正常
作品:
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 时要返回的内容。这就是区别。