递归解法

本文探讨了递归和循环在解决问题时的适用场景和优缺点。递归算法虽然代码简洁,但可能导致较高的时间和空间复杂度。而循环算法执行效率高,但不适用于所有问题。以LeetCode24题为例,展示了如何用递归交换链表中的节点。通过对比,强调在选择解题策略时应考虑问题规模和资源效率。
摘要由CSDN通过智能技术生成

递归解题思路

1.一个问题可划分为若干类似的子问题 ,并且这些子问题都可以用同样的方法模板来解决,这个时候可以用递归。

2.能用递归的解法,也能用循环来解。具体适用哪种,看问题规模。

比较优点缺点
递归算法代码简洁、清晰,并且容易验证正确性。它的运行需要较多次数的函数调用,如果调用层数比较深,每次都要创建新的变量,需要增加额外的堆栈处理,会对执行效率有一定影响,占用过多的内存资源。
循环算法速度快,结构简单。并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。

递归解题思路:

  1. 递归的终止条件:递归应该在何时结束?
  2. 返回值:上一次调用,返回的是什么?
  3. 单次调用要做什么:当前调用,应该完成什么任务?

LeetCode 24. 两两交换链表中的节点

class Solution {
    public ListNode swapPairs(ListNode head) {
        //1.终止条件
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = head.next;
        //递归调用
        head.next = swapPairs(newHead.next);
        //3.当前调用做交换节点操作
        newHead.next = head;
        //2.返回新的以newhead为头结点的链表
        return newHead;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值