任何的递归调用都可以转换为迭代吗?
特别是在解决嵌套问题时有奇效,比如汉诺塔的移动问题(以前想半天都没想通,后来突然想通了),真是又简单又有趣。
不过递归有个隐患就是可能会导致栈溢出,而迭代却可以避免因栈的使用而导致溢出。
但是用迭代很难去思考问题,并且是否所有的递归都可以转换成迭代呢?
不过递归有个隐患就是可能会导致栈溢出,而迭代却可以避免因栈的使用而导致溢出。
但是用迭代很难去思考问题,并且是否所有的递归都可以转换成迭代呢?
背后的理论基础是数学归纳法,SICP 有讲过这个东西我记得。
递归和迭代的区别是什么?想明白这个问题就知道为什么有限递归可以转换
这东西同样属于可以轻松查到的,还是那句话,直接就能验证搜索到的东西,为什么还要发个帖子出来?
@James369
基本上就是找到语言结构的递归定义然后写一个递归的转换函数按结构匹配递归程序将其转换成迭代的就可以了(顺带一提多分支的递归对应的归纳法更精确地讲应该叫“结构归纳法”)
所以很多语言都限制了递归的最大深度。
如果你觉得低效的学习是你所希望的,那你大可继续如此。
用迭代和递归都能解决问题,但是使用递归时,由于有数学归纳法保证递归关系的正确性,所以只要专注于解决 2 个相邻层的关系就可以了,然后使用数学归纳法的基本情况作为递归出口。当然,在实际编程中,递归会增加函数调用栈的开销,也是要考虑的一方面
樓主你是沒有讀過 CS 嗎
lz 的问题非常精确,不是开放式问题,不需要任何开放式的回答。他原先的问题就有这种查查资料就能明白的问题,那他进步了吗?你们的友善除了让人舒服真的能起作用吗?
普世价值观在工程和学术上没用