7、递归思想和迭代思想(递推思想)

递归与递推思想解析
本文探讨了递归和递推两种算法思想的核心概念及其应用。递归通过自我调用解决问题,需定义终止条件避免无限循环;递推则从最小规模问题出发,逐步构建更大规模问题的解。


递归思想(递归函数)
递归思想的一个基本形式是:在一个函数中,有至少一条语句,又会去调用该函数自身。
但是,从代码角度来说,如果单纯是函数内部调用函数本,则会出现“出不来”的现象。
则我们就必须再来解决下一个问题:
怎么终止(停止)这种调用——找到递归函数的出口。

递推思想(迭代思想)
递推思想本身并不跟函数有直接关系(虽然常常写在函数中)。
其基本思路为:
为了解决一个“大”问题,根据现实逻辑,如果能够找到同类问题的一个“最小问题”的答案(通常是已知的),并且根据已知算法,又可以因此得到比最小问题“大一级”问题的答案。 而且,依次类推,又可以得到再大一级问题的答案,最终就可以得到“最大那个问题”(即要解决的问题)的答案。
可见,该思想的过程依赖与2个条件:
1,可知同类最小问题的答案;
2,大一级问题的答案可以通过小一级问题的答案经过简单运算规则而得到。
此思想的解体思路是:从小到大
对比:递归思想是:从大到小,在回归到大。

总结比较:
1,很多问题,用递归和递推都可以解决。
2,有些问题只能用递归。
3,如果两种方法都可以解决,推荐使用递推——效率高很多!




迭代思想递归思想存在多方面区别,具体如下: - **概念层面**:递归是指程序调用自身的编程思想,即一个函数调用本身来实现循环;迭代是利用已知的变量值,根据递推公式不断演进得到变量新值的编程思想,是函数内某段代码实现循环[^1]。 - **结构方面**:迭代显式使用重复结构,而递归通过重复函数调用实现重复,使用的是选择结构。二者都基于控制结构,都涉及重复结构[^4]。 - **终止条件**:迭代在循环条件失败时终止,通过不断修改计数器,直至计数器值使循环条件不成立;递归在遇到基本情况时终止,递归不断产生最初问题的简化副本,直至达到基本情况[^4]。 - **效率方面**:在循环次数较大时,迭代的效率明显优于递归递归不断调用函数,会浪费空间,还容易造成堆栈溢出;迭代运行时间只随循环的增加而增加,且无额外开销[^2][^3]。 - **代码特性**:递归用有限的循环语句能实现无限集合,代码易读,可将大问题转化成小问题,减少代码量;迭代代码难理解,不如递归代码简洁,编写复杂问题时,代码逻辑不易想出[^2][^3]。 - **实现循环方式**:简单来说,递归是重复调用函数自身实现循环;迭代是函数内某段代码实现循环。并且,递归中一定有迭代,但是迭代中不一定有递归。所有的迭代可以转换为递归,但递归不一定可以转换成迭代[^1][^2][^3]。 以下是反转链表的迭代递归代码示例: ```python # 迭代解法 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def reverseList_iterative(head): pre = None cur = head while cur is not None: next = cur.next cur.next = pre pre = cur cur = next return pre # 递归解法 def reverseList_recursive(head): if head is None or head.next is None: return head pre = reverseList_recursive(head.next) head.next.next = head head.next = None return pre ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值