函数之递归

递归的特点:
1.可以代替循环
2.效率低(因为返回值要一直等待)

def test(x):
    print(x)
    if int(x / 2) == 0:
        return n
    res = test(int(x/2))
    return res

test(10)

分析以上步骤:
1、test(10)传入一个参数10,开始调用test(10)函数
2、执行第二步print(10) --- 得到一个10
3、执行第三步进行判断,发现int(10/2) == 5 不等于0 ,条件不成立,return n不会执行,直接进行下一步
4、res = test(int(x/2)) -- 风湿理论,相当于把函数test(5)复制给变量res,继续调用第二层函数。 ****此时res = ?等待函数返回结果
5、接着执行print(5) --- 得到一个5
6、继续第三步进行if判断,发现int(5/2) == 2 不等于0,条件不成立,继续跳过return n不执行。
7、继续给res = test(int(x/2))赋值,这次变成了res = test(2)
8、接着调用第三层函数test(2) ********此时res = ?等待函数返回结果
9、接着执行print(2) -- 得到一个2
10、继续if判断,还是不成立,跳过return n
11、这次res = test(1),继续返回上面循环调用第四层函数 ******res = ?等待函数返回结果
12、接着print(1) -- 得到一个1
13、继续if判断,这次条件成立了,直接返回return n
14、此时的return n是在第四层函数中,所有return n是返回给了第四层函数,最后的n是2,所以第四层函数的res = 1
15、此时就第四层函数已经拿到了res = 1,上面程序中res = ?下面还有一句return res。注意,前面是因为res没有拿到值,所以不停的调用函数,此时已经拿到值了,不需要再调用函数,所以可以直接执行下一步return res,即return 1。注意这里的return 1又是第三层函数的返回值。
16、从15步中可以看到return 1是第三层函数的返回值,意味着第三层中的res = 1,继续return 1返回给第二层函数
17、第三层函数拿到res = 1,继续return 1返回给第一层函数,所以res = test(10),自然也就是print(res) = 1,即print(test(1))等于1.
而如果只是调用test(10),则结果是:
10
5
2
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值