【发布时间】:2018-09-26 22:42:35
【问题描述】:
我正在阅读有关递归的内容。练习之一是编写一个递归函数来对数组中的数字求和。我不应该使用Array#sum 来执行此操作。我写这个是为了模仿递归:
def recursive_sum(list)
if list == []
return 0
else
return list.shift + recursive_sum(list)
end
end
recursive_sum [1,2,3,4]
# => 10
“递归函数/方法调用自身。”这很清楚,似乎这个函数确实调用了自己。但我不确定这是否算作递归函数,因为我在其中使用了shift 方法。
【问题讨论】:
-
是的,它是一个递归函数。
-
为什么你认为你可能不被允许使用
shift? -
是的,它是递归的,但请考虑
def recursive_sum(list); first, *rest = list; rest.empty? ? first : first + recursive_sum(rest); end。注意如果first, *rest = [1,2,3],那么first #=> 1和rest #=> [2,3]。 -
@Stefan。我认为我应该使用更基本的操作(如索引)来实现这一点。事实证明,这个想法是错误的。
-
您可以考虑使用不修改其接收器的方法(如上面的 Cary Swoveland 所建议的)。但这不会影响您的方法的“递归性”。
标签: ruby algorithm recursion terminology