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')
  • 相关阅读:
    数据库mysql基础语言--各模式的含义
    Linux下判断磁盘是SSD还是HDD的几种方法
    linux解压大全
    RedHat Linux RHEL6配置本地YUM源
    利用ssh传输文件-服务器之间传输文件
    深入理解asp.net里的HttpModule机制
    WPF(一)
    JS中caller和callee
    Vue-Methods中使用Filter
    c#值类型与引用类型区别
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13551344.html
Copyright © 2011-2022 走看看