zoukankan      html  css  js  c++  java
  • 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

    嵌套层次深,函数调用开销大
    重复计算
  • 相关阅读:
    java中创建线程的方式
    idea查看一个接口的子接口或实现类的快捷键
    idea查看源码没有注释的问题
    spring中的Aop
    spring中的ApplicationListener监听器
    spring中的事务管理
    IDEA创建springboot 项目
    xiaopiu产品设计
    java 6大设计原则 一:观察者模式
    java面向对象
  • 原文地址:https://www.cnblogs.com/OceanF/p/10774322.html
Copyright © 2011-2022 走看看