把递归拆出来理解
2021/11/24 23:40:11
本文主要是介绍把递归拆出来理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这两天写几个递归算法题有点心得,记录一下
先说结论
递归过程:(判断条件)-进入--操作-(判断条件)-退出
rec(a){ if(满足退出)-退出 操作 rec(a) (操作) }
从链表逆序开始
// 获取节点所在位置,逆序 public int length(ListNode node, int n) { if (node == null) return 0; int pos = length(node.next, n) + 1; //获取要删除链表的前一个结点,就可以完成链表的删除 if (pos == n + 1) node.next = node.next.next; return pos; }
拆开
// 获取节点所在位置,逆序 public int length(ListNode node, int n) { if (node == null) return 0; int pos = length(ListNode node, int n) { if (node == null)//exit return 0;/////exit int pos = length(ListNode node, int n) { if (node == null)//exit return 0;/////exit int pos = length(node.next, n){...} + 1; }+ 1; . . . }+1 //获取要删除链表的前一个结点,就可以完成链表的删除 if (pos == n + 1) node.next = node.next.next; return pos; }
达到出口条件
// 获取节点所在位置,逆序 public int length(ListNode node, int n) { if (node == null) return 0; int pos = length(ListNode node, int n) { if (node == null)//exit return 0;/////exit int pos = length(ListNode node, int n) { if (node == null)//exit return 0;/////exit int pos = length(node.next, n){...//pos=pos+1 |6 if (node == null)//exit return 0;/////exit int pos = length(ListNode node, int n) {// |3.2 if (node == null)//true |1 return 0;/////exit 0 |2 } + 1; //pos =0+1 |3.1 if (pos == n + 1)// false |4 node.next = node.next.next; return pos; //return 0 |5 }+ 1; . . . }+1 //获取要删除链表的前一个结点,就可以完成链表的删除 if (pos == n + 1) node.next = node.next.next; return pos; }
判断回文链表
ListNode temp; public boolean isPalindrome(ListNode head) { temp = head; return check(head); } private boolean check(ListNode head) { if (head == null) return true; boolean res = check(head.next) && (temp.val == head.val); temp = temp.next; return res; }
拆开
ListNode temp; public boolean isPalindrome(ListNode head) { temp = head; return check(head); } private boolean check(ListNode head) { if (head == null) return true; boolean res = check(head.next){ if (head == null) return true; boolean res = check(head.next){ if (head == null) return true; boolean res = /*check(head.next)*/true && (temp.val == head.val);//reach exit 1 temp = temp.next; //下一个 2 return res; //返回上级 3 } && (temp.val == head.val); //判断 4 temp = temp.next; return res; } && (temp.val == head.val); temp = temp.next; return res; }
虽然这个题递归会重复计算一次,但是这个递归属于看得懂很难想出来
这篇关于把递归拆出来理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南