这个ruby代码是否算作递归函数?

时间:2018-04-17 04:40:10

标签: ruby algorithm recursion terminology

我正在阅读有关递归的内容。其中一个练习是编写一个递归函数来对数组中的数字求和。我不应该使用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方法。

1 个答案:

答案 0 :(得分:3)

是的,我会称之为递归函数,正是因为你提到的原因:"递归函数/方法调用自身。"

该方法调用shift并不会造成伤害。实际上,它也会调用其他方法 - 例如if==+

你不允许调用任何其他方法,只是调用方法本身而不是方法无法做任何有用的事情。

def foo
  foo
end

调用递归方法会引发SystemStackError (stack level too deep)