赞 | 60 |
VIP | 0 |
好人卡 | 0 |
积分 | 87 |
经验 | 0 |
最后登录 | 2024-2-2 |
在线时间 | 501 小时 |
Lv4.逐梦者
- 梦石
- 2
- 星屑
- 6687
- 在线时间
- 501 小时
- 注册时间
- 2018-3-23
- 帖子
- 533
|
(以下部分大部分为废话)
递归。
递归是函数方面的一个基本概念,也就是函数自己调用自己。
首先,要考虑到的一件事是,自己调用自己的函数如果没有任何“边界条件”,也就是决定递归终止的条件,那么就会产生死循环。
但是如果递归在某一层会终止并且一层一层返回,最终就可以得到答案。
例如斐波那契数列的递归/递推式可以表达为f(n)=f(n-1)+f(n-2),边界条件为f(1)=1,f(2)=1。结果将是1,1,2,3,5,8,13,21,34,55……这样的一个数列。如果我们要求某一项例如f(5),结果就是这个数列的第五项,也就是5。
所以递归是数学上的一个重要方法,在算法设计上也有重要意义。
(正文)
这里使用这种方法,原因就是因为这里有一个至关重要的unless state?(state_id),在Game_Battler 2的第59行。
这段代码意味着,一个已经被附加的状态不会再被进行任何重复附加的处理。
也就是说,如果一个状态被设置成连带附加其它状态(数据库-状态页面右侧),那么如果这些状态没有更进一步连带附加的状态,那么附加完就自然结束,不会继续递归,正常返回。
如果有进一步附加的状态,就会继续附加这些状态,这可能又会导致更多状态被连带附加……以此类推。
但是,由于一个已经被附加的状态不会重复进行连带附加的操作,所以上述操作一定是会终止的。例如A连带B,B连带A,但是由于连带时A已经被附加,所以不会继续进行附加,正常终止。
退一万步讲,这段代码如果由一个状态的附加附加了全数据库的状态,但这也就是极限了,之后肯定会正常终止。
所以,不产生死循环的递归是一种十分有用的算法设计思想。设计算法的时候也不要盲目使用递归,只有在递归是有限时间,并且可以简化算法思维难度的时候,再使用递归。 |
评分
-
查看全部评分
|