zoukankan      html  css  js  c++  java
  • 【Python学习日记】B站小甲鱼:递归和汉诺塔问题

    求阶乘 比如输入5,输出1*2*3*4*5的结果

    使用循环体

    def factorial(n):
        result = n
        for i in range(1,n):
            result *= i
    
        return result
    
    temp = int(input('输入正整数:'))
    print(factorial(temp))

    使用递归:1.调用函数自身;2.设置正确的返回值(结束条件)

    def factorial(n):
        if n == 1 :
            return 1
        else:
            return n*factorial(n-1)
    
    temp = int(input('输入正整数:'))
    print(factorial(temp))

    递归使用栈存储方式,比较消耗时间和空间。所以在求阶乘这种程序上递归是不被建议的,因为如果用户输入太大的数字会导致程序崩溃。python3的递归深度默认是100层

    斐波那契数列 :分治思想

    以迭代的方式

    def factorial(n):
        if n == 1 or n == 2 :
            return 1
    
        else:
            return factorial(n-1)+factorial(n-2)
    
    temp = int(input('输入正整数:'))
    
    print(factorial(temp))

    以循环的方式

    def fab(n):
        n1 = 1
        n2 = 1
        n3 = 1
        while (n-2)>0:
            n3 = n1 + n2
            n1 = n2
            n2 = n3
            n -= 1
        return n3
    
    temp = int(input('请输入正整数:'))
    print(fab(temp))

    迭代会比较消耗时间和空间,在数字比较大的时候可以明显的感受到两个程序的消耗时间的差别

    汉诺塔问题

    def hanoi(n,x,y,z):
        if n == 1:
            return (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')
  • 相关阅读:
    [转]手把手硬件电路详细设计过程
    虚拟机检测技术攻防
    TTL电平和CMOS电平总结
    每个程序员都应注意的9种反面模式
    优化Laravel网站打开速度
    如何在 PHP 中处理 Protocol Buffers 数据
    日请求亿级的 QQ 会员 AMS 平台 PHP7 升级实践
    跨境电商国际物流模式
    2016跨境电商五大物流模式盘点
    10个值得深思的PHP面试问题
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13551344.html
Copyright © 2011-2022 走看看