美文网首页
Python学习之路(递归函数)

Python学习之路(递归函数)

作者: 55lover | 来源:发表于2017-12-22 10:07 被阅读0次

函数之 递归函数

def fact(n): 
    if n == 1:
        return 1
    else: 
        return n * fact(n-1)
print(fact(1))
# print(fact(2))
# print(fact(10))
# print(fact(100))
# print(fact(900))
# print(fact(1000)) # 报错  递归栈溢出
# 解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

# 尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

小结

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。
Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

练习

汉诺塔的移动可以用递归函数非常简单地实现。

B=[] #设置操作过程列表
def move(n, a, b, c):
    global s
    if n==1:
        buzhou=a+str(n)+'-->'+c+str(n) #一个圆盘需要从A到C操作步骤
        B.append(buzhou) #向列表中添加操作步骤
        return
    move(n-1,a,c,b) # 将A柱的n-1个盘移到B柱
    buzhou=a+str(n)+'-->'+c+str(n) #将A柱的第n个盘移到C柱操作步骤
    B.append(buzhou) #向列表中添加操作步骤
    move(1,a,b,c) #将A柱上最后一个盘移到C柱=
    move(n-1,b,a,c) #将过渡柱子B上n-1个圆盘B移动到目标柱子C
    
move(3,'A','B','C') #2**64-1,64次太大,这里用6个盘子
print('共需操作'+str(len(B))+'次','操作过程为',B)#计算6个盘子的步骤数及操作过程

关注一波!喜欢一波!本人是前端菜鸟,正在做自己的个人博客邓鹏的博客,欢迎来交流学习, 使用的技术 vue + koa2 + mysql + php + nginx!

相关文章

  • Python精简入门学习(十)

    Python精简入门学习之递归函数-递归 -递归 -如图所示

  • Python学习之路(递归函数)

    函数之 递归函数 小结 使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。针对尾递归优化的语言可以通...

  • Python语言程序---代码复用与函数递归(二)

    Python语言程序---代码复用与函数递归(二) 函数递归 在函数定义中,调用函数自身的方式就是递归。 递归并不...

  • Python札记20_递归、传递

    在Python中函数也是一种对象,有几种特别的应用: 递归函数 传递函数 嵌套函数 递归 递归又称为递回,是指在函...

  • 学Python的014天

    原创:XIAO油菜花学习进度记录:《零基础入门学习Python》P23:函数:递归是什么《Python开发入门与爬...

  • 学习第十六天总结

    一、学习内容 1、Python课程学了函数的定义与使用,代码的复用与函数递归。2、软件测试课程学习了postman...

  • Python:3.函数

    调用函数 定义函数 函数的参数 递归函数 参考 廖雪峰的Python教程

  • 25-Python函数5

    1.递归函数 2.函数作用域 学习地址: 撩课-Python大数据+人工智能1撩课-Python大数据+人工智能2...

  • 13_Python递归函数_全栈开发学习笔记

    1. 初识递归 什么是递归:在函数中调用自身函数最大递归深度默认是997/998 —— 是python从内存角度出...

  • Python学习笔记——递归函数

    1.设置递归层数 2. 阶乘 3.斐波那契数列 4. 汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智...

网友评论

      本文标题:Python学习之路(递归函数)

      本文链接:https://www.haomeiwen.com/subject/uvltgxtx.html