Python-18 函数:递归是神马

来源:互联网 发布:刘远原画网络班 编辑:程序博客网 时间:2024/05/21 14:05

递归

如果说优秀的程序员是伯乐,那么把递归比喻成神马再形象不过了。

“普通程序员用迭代,天才程序员用递归”

递归这个概念,是算法范畴,本不属于Python,但是如果掌握了递归方法,会发现是一个非常棒的编程思路!


用普通方法实现一个正整数的阶乘

def factorial(n):    result = n    for i in range(1,n):        result*=i    return resultnumber = int(input('请输入一个正整数:'))result = factorial(number)print('%d 的阶乘是:%d' % (number,result))        
>>> ================================ RESTART ================================>>> 请输入一个正整数:1010 的阶乘是:3628800>>> 

使用递归实现阶乘

def factorial(n):    if n == 1:        return 1    else :        return n*factorial(n-1)number = int(input('请输入一个正整数:'))result = factorial(number)print('%d 的阶乘是:%d' % (number,result))
>>> ================================ RESTART ================================>>> 请输入一个正整数:1010 的阶乘是:3628800>>> 


python递归调用的默认深度是100层

>>> def resout():resout()>>> resout()
  File "<pyshell#4>", line 2, in resout    resout()  File "<pyshell#4>", line 2, in resout    resout()  File "<pyshell#4>", line 2, in resout    resout()RuntimeError: maximum recursion depth exceeded>>> 
如果需要改变递归深度,如下,1000000为设置的递归深度

>>> import sys>>> sys.setrecursionlimit(1000000)

用递归计算斐波那契数列

def fab(n):    if n == 1 or n == 2:        return 1    if n > 2:        return fab(n-1)+fab(n-2)number = int(input('请输入菲波那切数列的顺序值:'))result = fab(number)print('第 %d 个斐波那契数值为:%d' % (number,result))


汉诺塔

def hanoi(n,x,y,z):    if n == 1:        print(x,'-->',z)    else:        hanoi(n-1,x,z,y) #将前n-1个盘子从x移到y上        print(x,'-->',z) #将最底下的盘子从x移动到z上        hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上n = int(input('请输入汉诺塔的层数:'))hanoi(n,'X','Y','Z')    












原创粉丝点击