进击のpython
递归函数
学过数学的可能多多少少听过“递归”这个词
那么递归函数到底是怎么个函数呢?
老样子,从需求找方法!
我想要 100/2 结果继续除2,直到结果为零,然后打印每一步的结果
怎么写呢?可以用循环!对!
n = 100 while n > 0: n = int(n / 2) print(n)
要的就是这种结果!但是,总有艮的
就想用函数来解决这个问题
甚至更过分的!还不想用循环!
能做吗?于是就有大傻子科学家研究出另一种写法:
def func(n): n = int(n/2) print(n) func(100)
这么写还懂是吧
发现,n 这个变量就变成 50 了,然后还是要执行这个函数
也就是说,我可能要多次调用这个函数!
所以,就有了接下来的想法:
def func(n): n = int(n / 2) print(n) if n > 0: func(n) func(100)
成功了!那光成功不行啊,咱们得研究研究怎么做到的呢???
有感觉出循环了吗?通过不断的自我调用,达到了目的
每一次的函数的输出都是基于上次的返回结果!
进阶
总有刁民想害朕!
这不,有人写了这个代码!
def func(n): n = int(n / 2) print(n) if n > 0: func(n) print(n) func(100)
和上面的比,就多了一句话(找不到?捐眼睛吧)
你试试结果是什么?和你想的一样吗?
如果你没学过这地方
指定和你想的不一样!
输出结果是这样的:
不是你想得100 也不是你想的1或者0吧!
那到底为什么呢????
以我现在的能力我只能这么给你解释
要是不明白的话,确实是我能力不足
还请大佬在下面评论一下,多谢!
所以,输出就是那个鬼样子!
特性
必须有明确的结束条件
每次进入更深一层的递归的时候,问题规模就会减少
递归效率不高,容易栈溢出(别问,问就自己百度)
来源:https://www.cnblogs.com/jevious/p/11135210.html