Python入门笔记(四)

递归

递归的举例:

汉诺塔游戏:

 

树 :

谢尔宾斯基三角形:

递归自拍:

 

如下是一个递归函数,但是调用它的话会一直循环直至消耗掉所有的内存,只有按ctr+c才会停止执行。

 

但是,如上,它会报错,Python3出于善意的保护,Python3对于递归的默认深度的设置是100层(Python2是1000层左右)。不过若是写网络爬虫工具,有时候不止100层,那么你可以自己设置一下递归的深度。

设置递归的深度可以通过下面的方法:

 

例题:写一个求阶乘的函数(正整数阶乘是指从1乘以2乘以3乘以4一直乘到所要求的数)

非递归的方法:

 

 

用递归的方法:

 

 

斐波那契(Fibonacci)数列的迭代实现

1123581321345589144

用函数来表示:

 

 

使用迭代的方法:

 

 

使用递归的方法:

 

 

随着数字逐渐增大,迭代比递归更快。

 

递归求解汉诺塔

举例: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上。

 

利用递归来写:

 

 

posted @ 2018-01-27 22:12  陈陈陈chen  阅读(208)  评论(0编辑  收藏  举报