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


    1.设置递归层数

    #设置recursion函数的层数,默认是100层
    import sys
    sys.setrecursionlimit(10000)
    

    2. 阶乘

    #定义一个阶乘函数
    def factorial(n):
        result = n
        for i in range(1,n):
            result *= i
        return result
    number = int(input('请输入一个正整数:'))
    result = factorial(number)
    print("%d的阶乘是:%d" % (number,result))
    
    请输入一个正整数:5
    5的阶乘是:120
    
    #递归
    def fac(n):
        if n == 1:
            return 1
        else:
            return n * fac(n-1)
    numbers = int(input('请输入一个正整数:'))
    results = fac(numbers)
    print("%d的阶乘是:%d" % (numbers,results))
    
    请输入一个正整数:5
    5的阶乘是:120
    

    3.斐波那契数列

    def fab(n):
        n1 = 1
        n2 = 1
        n3 = 1
        
        if n < 1:
            print('输入有误')
            return -1
        
        while (n-2) > 0:
            n3 = n2 + n1
            n1 = n2
            n2 = n3
            n -= 1
            
        return n3
    
    num = fab(20)
    if num != -1:
        print(num)
    
    6765
    
    #递归函数效率会降低
    def fab2(n):
        if n < 1:
            print('输入有误!')
            return -1
        if n == 1 or n == 2:
            return 1
        else:
            return fab2(n-1) + fab2(n-2)
    num2 = fab(20)
    if num2 != -1:
        print(num2)
    
    6765
    

    4. 汉诺塔

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

    汉诺塔

    #该函数参数的意义为:利用y将n个盘子从x移动到z
    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')
    
    请输入汉诺塔的层数:3
    x --> z
    x --> y
    z --> y
    x --> z
    y --> x
    y --> z
    x --> z
    
  • 相关阅读:
    给C# 2005提供VB2005特有的My命名空间!
    利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
    [非技术][小孩]色色的小孩
    中秋节快乐!
    SnipperImages(Silverlight DEMO)控件设计之Slider和ColorSlider
    IE8的Activities,WebSlices示例ie8.taobao.com
    Net框架中的设计模式之Builder(构造者)兼谈抽象工厂和composite模式
    DiscuzNT 商品交易插件设计之[线下交易流程]
    听“汉代风云”,看“晁错之死”
    [翻译] python Tutorial 之一
  • 原文地址:https://www.cnblogs.com/nigream/p/11251107.html
Copyright © 2020-2023  润新知