递归
递归的举例:
汉诺塔游戏:
树 :
谢尔宾斯基三角形:
递归自拍:
如下是一个递归函数,但是调用它的话会一直循环直至消耗掉所有的内存,只有按ctr+c才会停止执行。
但是,如上,它会报错,Python3出于善意的保护,Python3对于递归的默认深度的设置是100层(Python2是1000层左右)。不过若是写网络爬虫工具,有时候不止100层,那么你可以自己设置一下递归的深度。
设置递归的深度可以通过下面的方法:
例题:写一个求阶乘的函数(正整数阶乘是指从1乘以2乘以3乘以4一直乘到所要求的数)
非递归的方法:
用递归的方法:
斐波那契(Fibonacci)数列的迭代实现
1,1,2,3,5,8,13,21,34,55,89,144
用函数来表示:
使用迭代的方法:
使用递归的方法:
随着数字逐渐增大,迭代比递归更快。
递归求解汉诺塔
举例:64个盘
对于这个游戏的玩法,我们可以简单分为三个步骤:
(1)将前63个盘从X移动到Y上;
(2)将最底层的第64个盘子从X移动到Z上;
(3)将Y上的63个盘移动到Z上。
问题一:将X上的63个盘子借助Z移动到Y上;
问题二:将Y上的63个盘子借助X移动到Z上。
问题一(将X上的63个盘子借助Z移动到Y上)可拆解为:
(1)将前62个盘从X移动到Z上;
(2)将最底层的第63个盘子移动到Y上;
(3)将Z上的62个盘移动到Y上。
问题二(将Y上的63个盘子借助X移动到Z上)可拆解为:
(1)将前62个盘从Y移动到X上;
(2)将最底层的第63个盘移动到Z盘上;
(3)将X上的62个盘移动到Y上。
利用递归来写: