You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我编写的这段Ruby递归求和代码是否属于递归函数?

你的代码确实是递归函数,但有个小细节需要优化!

首先可以明确告诉你:你写的recursive_sum绝对是一个递归函数,完全符合递归的定义——它在函数内部调用了自身,同时具备递归必需的两个核心要素:

  • 基线条件(Base Case):当输入的数组为空时返回0,这是终止递归的关键,确保函数不会无限调用自身导致栈溢出。
  • 递归步骤(Recursive Step):把“求整个数组的和”拆解成“第一个元素的值 + 求剩余数组的和”这个更小的子问题,逐步缩小问题规模,最终收敛到基线条件。

不过你的代码有个容易被忽略的小问题:list.shift方法会直接修改传入的原数组。比如你执行这段代码后:

my_list = [1,2,3,4]
recursive_sum(my_list)
puts my_list.inspect # 输出会是 [],原数组被清空了

这通常不是函数应该有的行为——调用函数不应该对传入的参数产生副作用。我们可以用数组切片来避免这个问题,修改后的代码如下:

def recursive_sum(list)
  if list.empty?
    0
  else
    # 用list[0]取第一个元素,list[1..-1]获取从第二个元素到末尾的子数组
    list[0] + recursive_sum(list[1..-1])
  end
end

如果喜欢更简洁的写法,也可以用三元表达式:

def recursive_sum(list)
  list.empty? ? 0 : list[0] + recursive_sum(list[1..-1])
end

这样修改后,递归的逻辑完全不变,同时不会改动原数组。测试一下:

my_list = [1,2,3,4]
puts recursive_sum(my_list) # => 10
puts my_list.inspect # => [1,2,3,4] 原数组保持原样

内容的提问来源于stack exchange,提问作者Xullnn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:20:28