查看: 850|回复: 5

[有事请教] 为什么发生栈过深

[复制链接]
梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
发表于 2025-12-21 01:15:24 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
def aa(j=2)
  
  for i in 0...2
      aa(i)
  end
  p "007"
end

aa
梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
 楼主| 发表于 2025-12-21 01:21:50 | 显示全部楼层
本帖最后由 kvkv97 于 2025-12-21 01:24 编辑

  def add_state(state_id, force = false)

    # 无附加本状态的情况下
    unless state?(state_id)

      # 状态 ID 追加到 @states 序列中
      @states.push(state_id)
      # 所有状态的循环
      for i in 1...$data_states.size
        # 状态变化 (+) 处理
        if $data_states[state_id].plus_state_set.include?(i)

          add_state(i)
        end
        # 状态变化 (-) 处理
        if $data_states[state_id].minus_state_set.include?(i)
          remove_state(i)
        end
      end

    end

  end

为什么上面 调用 add_state方法,不会发生栈过深?
回复

使用道具 举报

梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
 楼主| 发表于 2025-12-21 01:54:20 | 显示全部楼层
def add_state(state_id=2)
  for i in 1...5
    if [2].include?(i)
      add_state(i)
    end
  end
end
   
add_state

发生栈过深,为什么?
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2025-12-21 02:33:55 | 显示全部楼层
上面有条件不会永远执行
下面无条件

差别就在这
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2025-12-21 11:02:20 | 显示全部楼层
unless state?(state_id)
这个判定,就是如果已经附加了状态,就不再附加了,当然不会出现反复递归

点评

明白了,谢谢  发表于 2025-12-21 16:22
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部