今天朋友请教我递归函数的问题,给讲解到深夜才把诀窍给掌握了,我也是费了九牛二虎之力。
起初是以我为中心的编程思想给讲解的,死活听不懂,后来才知道我走入了误区,如果他编程思想一点就通的话,也不会问我递归的问题了。
好了,言归正传,开始讲解。
递归函数:我称之为傻瓜函数,或者打破砂锅问到底函数、不撞南墙不回头函数
为什么这么说呢,递归函数有三个点:
- 递归退出条件
- 递归调用
- 递归算法
当递归函数没遇到递归退出的条件时,他会一直的递归调用,直到满足递归退出条件,他会拿着第一次递归(function(5))缺少的值找第二次(function(4))要,然后第二次问第三次要,一直要到满足递归退出条件为止
换种方法说就是你在玩游戏时做一个跑环的任务:
5号NPC说:我需要4号NPC的一个物品,你帮我拿过来,我会给你报酬;
结果你找到4号NPC后,4号NPC说:我需要3号NPC的一个物品,你帮我拿过来,我才能给你5号NPC需要的物品;
然后找到3号,3号让你找2号,依次类推,直到找到最后(满足递归退出条件)
直到你找到了1号NPC,将他给你的物品给了2号,把2号给你的物品给了3号,一直到你把4号的物品给了5号,5号才会给你最终的物品奖励。
def function(x):
if x == 1:
return 1
else:
return function(x - 1) * x
print(function(5))
所以上面这个递归函数可以理解为:((((function(1)*2)*3)*4)*5
是不是看懵了?
这样看就明白了