递归算法讲解(结合内存图)

本文详细介绍了递归算法的概念、基本定义和思考步骤,强调了终止条件的重要性以及如何通过递归解决实际问题,如台阶问题。还通过内存图解释了递归可能导致的栈溢出问题。
摘要由CSDN通过智能技术生成

递归算法

递归是快速排序的基础,所以一定要理解基本概念!

递归其实就是一种循环

for循环/while循环,循环的是一个代码块
递归循环,循环的是一个方法

递归的定义,作用,本质

本质:方法不断调用自身

作用:让方法不断地自我循环
在这里插入图片描述

递归的思考步骤(重要)

递归的思考步骤:
1.确定递归函数的参数和返回值

参数:

  • 用到了哪些参数,哪些变量就是参数

返回值:

  • 涉及加减乘除,返回值一般是int,其他一般是void
  • 特殊情况特殊记

2.确定单层递归的逻辑

  • 累计经验
  • 递归一定是从后向前想,由易向难推导,不要钻死胡同!

3.明确终止条件

  • 递归终止条件永远在递归方法最上层(最先判断),在单层递归逻辑之上

递归终止条件的作用

递归一定要有终止条件,否则一定会栈溢出。

在这里插入图片描述
在这里插入图片描述

上图这种递归就是无限的方法栈帧入栈

栈溢出(StackOverFlow)
在这里插入图片描述

结合内存图阐述递归

有一只乌龟,他要跳上n级的台阶,每次只能跳1或2格,有几种跳法?

反着想,不要钻牛角尖

(单层递归逻辑)
跳到最后一个台阶,要么跳1格上去,要么跳2格上去,所以是jump(n-1)+jump(n-2)
……
(递归终止条件)
想到跳第一个台阶,只有一种跳法;跳两个台阶,可以跳一次,也可以跳两次,所以是两种

(参数和返回值)
返回值肯定是int,参数就一个台阶级数n

在这里插入图片描述

内存图(假设n = 5)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值