• note 7 递归函数


    递归:程序调用自身
    形式:在函数定义有直接或间接调用自身

    阶乘:N!=123...N

    def p(n):
        x = 1
        i = 1
        while i <= n:
            x = x * i
            i = i + 1
        return x
    

    n!=(n-1)! * n
    ...

    兔子数列

    斐波那契数列


    def fib(n):
        if n == 1 or n == 2:
            return 1
        else :
            return fib(n - 1) + fib(n - 2)
    
    print fib(6)
    

    汉诺塔

    count = 0#步骤数    x**n - 1
    def hanoi(n,A,B,C):
        global count
        if n == 1:
            print 'Move',n,'from',A,'to',C
            count += 1
        else:
            hanoi(n - 1,A,C,B)
            print 'Move',n,'from',A,'to',C
            count += 1
            hanoi(n - 1,B,A,C)
    
    hanoi(5,'Left','Mid','Right')
    print count
    

    随机停车

    #随机停车
    import random
    
    def parking(low,high):
        if high - low < 1:
            return 0
        else :
            x = random.uniform(low,high - 1)
            return parking(low,x) + 1 + parking(x + 1,high)
    
    s = 0
    for i in range(1000):
        s += parking(0,5)
        
    print s / 10000.
    

    Renyi停车常数

    递归的时间开销

    递归的优劣分析

    优势strength

    它能使一个蕴含递归关系且结构复杂的程序简洁精炼,增加可读性
    特别是在难于找到从边界到解的全过程的情况下,如果把问题推进一步,其结构仍维持原问题的关系
    

    劣势weakness

    嵌套层次深,函数调用开销大
    重复计算
  • 相关阅读:
    [BZOJ4553][TJOI2016&HEOI2016]序列
    树套树乱讲的代码
    树套树乱讲
    [Luogu4174][NOI2006]最大获益
    [BZOJ3879]SvT
    [BZOJ3611][HEOI2014]大工程
    [BZOJ1501][NOI2005]智慧珠游戏
    [BZOJ1499][NOI2005]瑰丽华尔兹
    [BZOJ3460] Jc的宿舍
    [HDU4812]D Tree
  • 原文地址:https://www.cnblogs.com/OceanF/p/10774322.html
Copyright © 2020-2023  润新知