小白学算法01:递归+初识栈

1.什么是递归?
递归可以把不能或不好解决的大问题 — >几个小问题—> 更小的问题—>直接解决问题

2.递归的两大条件:
(1) 边界条件(基线条件):确定递归到何时终止,也称为递归出口。(就是指函数不再调用自己)
(2) 递归模式(递归条件):大问题是如何分解为小问题的,也称为递归体。(函数调用自己)

3.递归的本质就是函数调用自己。
4.递归的优缺点:
优点:让解决方案更加清晰、更易理解。
缺点:调用自身函数以及向栈中压入弹出数据,都非常消耗空间和时间;存在重复计算(斐波那契数列);调用栈可能会溢出。
5.初识栈
看一个小例子来大体了解堆栈过程。

def hello(name):
    print("hello! " + name + " good morning!")
    hello2(name)
    bye(name)

def hello2(name):
    print(name + "  have a nice day!")

def bye(name):
    print(name + "  bye bye~")

hello(name='PYTHON')

http://www.pythontutor.com使用这个工具看执行顺序
(我尝试录屏,发现无法上传,哭了)
当你调用一个函数时,计算机会先为这个函数调用分配一块内存。字丑,见谅
需注意的点:
(1)调用另一个函数时,如果当前函数暂停并处于未完成状态,该函数的所有变量的值都还在内存中。
(2)执行hello2后,回到函数hello中,并从离开的地方开始接着往下执行。

回过头来,看看栈的定义:栈是一种操作受限制的线性表,将允许进行插入、删除的一端称为栈顶,另一端称为栈底。先进入的数据压入栈底,最后的数据在栈顶,需要读数据的时候,从栈顶开始弹出数据。(最后一个数据被第一个读出来)

阶乘问题:
(阶乘就是调用栈的)在这里插入图片描述在这里插入图片描述用这个工具,可以快速直接的看运行步骤。

栈虽然十分方便,但是会占有大量的内存,在此情况下,我们有两种选择,一是重新编写代码,转而使用循环。二是使用尾递归。(还不了解尾递归,后续补充)

参考书籍:算法图解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值