03_第三章 递归

本章内容:

  • 学习递归。递归是是很多算法都使用的一种编程方法。
  • 学习如何将问题分成基线条件和递归条件。第四章将介绍的分而治之策略使用这种简单的概念来解决棘手的问题。

 

目录

递归

基线条件和递归条件


递归

比如说有个例子:你要去找一把钥匙,钥匙在一个箱子里面,但是箱子里面还有箱子,箱子里面还有箱子,不知道在哪个箱子里面会有那把钥匙。对于这个问题,很清楚有两个解决的办法。

*(下面用伪函数来写)

第一种方法使用的是while循环:只要盒子不空,就从中取出一个盒子,并在其中仔细查找:

def look_for_key(main_box):
    pile = main_box.make_a_pile_to_look_through()
    while pile is not empty:
        box = pile.grab_a_box()
        for item in box:
            if item.is_a_box():
                pile.append(item)
            elif item.is_a_key():
                print("found the key")

第二种方法使用的是递归——函数调用自己

def look_for_key(box):
    for item in box:
        if item.is_a_box():
            look_for_key(item)
        elif item.is_a_key():
            print("found the key")

主要来说,两种方向相同,但是第二种方法更加清晰,循环的性能更好

Leigh Caldwell在Stack Overflow上说过一句话:如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说比较重要。

 

 

基线条件和递归条件

每个函数都有两个部分:基线部分和递归条件

递归条件:函数调用自己

基线条件:函数不在调用自己

找一个例子来和大家分享一下,比如说我要求解  阶层  f(n)= n!

#求解 n!
def fact(x):
    if x == 1:
        #基线条件,如果是(x==1)的话,那么递归就结束了
        return 1
    else:
        #递归条件(x!=1)
        return x*fact(x-1)
print(fact(5))

结果是120 

 

关于栈这一快方面的东西,主要在这个连接的博客中,大家可以批评指正

(最好用电脑的浏览器打开嘻嘻嘻)

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值