• 斐波那契数列&&上台阶


    使用装饰器的场景

     当我们想对多个函数增加一个相同的功能时,例如计数统计,缓存计算结果,记录日志等

    
    
    # coding:utf-8
    # 【题目1】
    # 斐波那契数列 又称黄金分割数列,指的是这样的一个数列 1,1,2,3,5,8,13,21,,,
    # 这个数列从第三项开始,每一项都等于签名的2项和,求数列的第n项
    
    def memo(func):
        cashe={}
        def wrap(*args):
            if args not in cashe:
                cashe[args]=func(*args)
            return cashe[args]
        return wrap
    
    
    @memo
    def fi(n):
        if n<=1:
            return 1
        return fi(n-1) + fi(n-2)
    
    # print fi(5)
    # 【题目2】
    # 一个共有10个台阶的楼梯,从下面走到上面,一次只能迈1-3个台阶,并且不能后退,走完所有的台阶共有多少种方法
    当有n个台阶时,在上n台阶之前一步,如果是一次上三个台阶 就有f(n-3)中方法 如果一次上2个台阶就有f(n-2)中方法,如果一次上1个台阶剩下的就有f(n-1)种方法
    n=1时 c=1
    n=2 c=2
    n=3 c=4
    n=4 
     (1)第一步迈1个台阶 剩下3步 f(n-1)=f(3)=4
    (2)第一步迈2个台阶 剩下2步 f(n-2)=f(2)=2
    (3)第一步迈3个台阶 剩下1步 f(n-3)=f(1)=1
    c=f(n-3)+f(n-2)+f(n-1)
    ......
    @memo
    def climb(n,steps):
        count=0
        if n==0:
            count=1
        elif n>0:
            for step in steps:
                count+=climb(n-step,steps)
        return count
    @memo
    def climb2(n):
        count=0
        if n<=1:
            count=1
        elif n==2:
            count=2
        elif n>2:
            count=climb2(n-1)+climb2(n-2)+climb2(n-3)
        return count
    print  climb(10,(1,2,3))
    print  climb2(10)
    

      

  • 相关阅读:
    实现 ajax 多项选择框
    Ajax 文件上传之PHP心得
    php tree生成树分享
    基于JQuery框架的AJAX
    jQuery Ajax 全解析
    asp 下载函数
    10元奥运纪念钞明发行 与人民币等值流通
    jQuery(Ajax)/PHP/MySQL实现搜索自动提示功能
    隔行扫描和逐行扫描(interlace and progressive )
    VGA 输出调试
  • 原文地址:https://www.cnblogs.com/alasijia/p/11239964.html
Copyright © 2020-2023  润新知