递归学习记录

本文深入探讨了递归的概念,包括其定义、递归要素和三种主要形式:记忆化、分治和回溯。通过实例解析LeetCode中的相关题目,展示了递归在计算机中的函数栈实现方式,并提供了递归函数模板。强调了递归终止条件和参数、返回值的意义,以及在实际编程中使用递归时需要注意的细节,如数据结构的选择。
摘要由CSDN通过智能技术生成

参考

https://www.youtube.com/watch?v=AqGagBmFXgw

小小福LeetCode

https://www.youtube.com/watch?v=C4o9ZUwAcwE

定义

自己调用自己

递归要素

  • 递归定义(参数含义以及返回值的含义)
  • 递归终止条件(或者叫Base Case 当问题足够小时,就会运行Base Case)
  • 递归关系(参考例题:Leetcode 700)

三种形式

  • Memorization(缓存) LeetCode 509 
  • Divide and conquer(分治) LeetCode 98
  • Backtracking(回溯) Leetcode 22

注意使用S+“”的形式和list的形式的不同,非常重要

 

递归在计算机中实现的形式:函数栈

其中print_n(n)的含义是打印1-n,递归终止条件是n=0,执行过程如下:

  1. 进入main函数,压栈
  2. 进入函数print_n(5),压栈
  3. 进入函数print_n(4),压栈
  4. 进入函数print_n(3),压栈
  5. 进入函数print_n(2),压栈
  6. 进入函数print_n(1),压栈
  7. 进入函数print_n(0),压栈
  8. print_n(0)触发递归终止条件,print_n(0)出栈
  9. print_n(1)函数中print_n(0)执行完,打印1,print_n(1)出栈
  10. print_n(2)函数中print_n(1)执行完,打印2,print_n(2)出栈
  11. print_n(3)函数中print_n(2)执行完,打印3,print_n(3)出栈
  12. print_n(4)函数中print_n(3)执行完,打印4,print_n(4)出栈
  13. print_n(5)函数中print_n(4)执行完,打印5,print_n(5)出栈

代码模版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值