Python小白学习记录递归

程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

递归特性

必须有一个明确的结束条件,防治出现死循环。每次进入更深一层递归时,问题规模相比上次递归都应有所减少,直到递归到明确的结束条件为止。递归效率不高,层次过多时会导致栈溢出(由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)几个经典的递归示例

1、斐波那契数列

斐波那契数列(Fibonaccisequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,被以递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n≥3,n∈N*)。简单说来就是一个数列,前2个数都是1,从第3个数开始,每个数都是它前面2个数之和。以此可以通过递归来推导第n个数的数值。

斐波那契数列函数的定义

这样定义的函数递归效率较低,n超过40就需要较长的时间才能返回结果了。

2、阶乘问题

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。年,基斯顿·卡曼引进这个表示法。亦即n!=1×2×3×……×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

思路:递归求阶乘函数,如果输入的参数等于1则返回1,否则返回n乘以该函数下次递归(实际从0开始才是对的!)。

阶乘函数的定义

3、汉诺塔问题

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

汉诺塔函数的定义


转载请注明:http://www.aierlanlan.com/grrz/4697.html