递归算法,说不出来对它是种什么样的感受。
硬要描述一下大概就是又爱又恨吧。
给人的感觉就像给脑子里塞了个回旋加速器,很猛,但是很晕。

运行环境 Runtime environment

1
2
3
操作系统: Windos10  
IDE: JetBrains Python 2018.2.4 x64
语言: Python 3.66

背景

多层级数据的结构化处理、文件列表管理、算法…balabala
递归的应用场景,是真的很多。

步步实现 递归

最原始的递归函数,自己调用自己,无限循环,调用栈叠起来~

1
2
3
def recursive_count_Decrement(v):
print(v)
return recursive_count_Decrement(v)

添加个跳出无限循环调用的基线条件

1
2
3
4
5
6
def recursive_count_Decrement(v):
print(v)
if v <= 1:
return v
else:
return recursive_count_Decrement(v)

模拟一个情景,我有一个硬盘,盘里有多个文件夹,文件夹里还有文件夹,然后其中只有一个文件夹里有一坨狗屎的图片,其余都是空文件。
那么,要找到这坨‘狗屎’,要怎么办。
思路:

检查文件夹里的每一样东西
有‘狗屎’结束 or 里面还有文件夹,钻进去继续全检查

用伪代码来描述一下:(不能直接运行)

1
2
3
4
5
6
def recursive_search(folder):
for i in folder:
if i.type == 'folder':
recursive_search(folder) # 此处递归
elif i.type == 'goushi':
return '找到了!'

emmm,逻辑非常清晰233
当然,python实现文件夹递归那就不用这么麻烦了,网上的写法很多尤其是用os.walk方法的,就已经足够了。

总结

递归只是为了让解决方案更清晰,并没有性能上的优势。
有些情况下,使用循环的性能更好。
根据情况和需求来选择更重要。

简单来说,递归函数就是自己调用自己,然后再给该函数设置一个基线条件让它从无限循环调用中跳转出来。