设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 619|回复: 5
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4647
在线时间
281 小时
注册时间
2013-10-13
帖子
852
跳转到指定楼层
1
发表于 2025-12-21 01:15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

aa

Lv3.寻梦者

梦石
0
星屑
4647
在线时间
281 小时
注册时间
2013-10-13
帖子
852
2
 楼主| 发表于 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方法,不会发生栈过深?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4647
在线时间
281 小时
注册时间
2013-10-13
帖子
852
3
 楼主| 发表于 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

发生栈过深,为什么?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39061
在线时间
11145 小时
注册时间
2009-3-15
帖子
4889
4
发表于 2025-12-21 02:33:55 | 只看该作者
上面有条件不会永远执行
下面无条件

差别就在这
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
37240
在线时间
7038 小时
注册时间
2012-5-26
帖子
3346

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

5
发表于 2025-12-21 11:02:20 | 只看该作者
unless state?(state_id)
这个判定,就是如果已经附加了状态,就不再附加了,当然不会出现反复递归

点评

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-4 12:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表