• 汉诺塔-小青蛙


    汉诺塔问题

    汉诺塔的解法在于将问题分解

    可以说汉诺塔只有三步

    代码写过程

    def hanoi(n, A, B, C):
        """
        :param n: 问题规模
        :param A: 起始盘子
        :param B: 路过盘子
        :param C: 目标盘子
        :return:
        """
        if n > 0:
            hanoi(n-1, A, C, B) # 打开冰箱门,把B当做目标盘子
            print("%s->%s" % (A, C)) # 把大象装进冰箱,进入冰箱的大象肯定是从上向下的
            hanoi(n-1, B, A, C) # 关上冰箱门,B是起始盘子
    

    代码写次数

    def func(n):
        if n<=1:
            return n
        else:
            return func(n-1)+1+func(n-1)
    

    算数写次数

    总次数:2**n-1
    

    小青蛙问题

    本质:问题的拆解+累加

    青蛙跳台阶算法,每次可以跳1级或两级,请问有n级台阶,有多少种跳法

    用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;

    当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;

    当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;

    当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法

    Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;

    当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................第一次跳出n阶后, 后面还有 Fib(n-n)中跳法.

    Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)

    又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)

    两式相减得:Fib(n)-Fib(n-1)=Fib(n-1) =====》 Fib(n) = 2*Fib(n-1) n >= 2

    def climbStairs(n):
        if n==1:
            return 1
        elif n==2:
            return 2
        else:
            return self.climbStairs(n-1)+self.climbStairs(n-2)
    

    使用循环

    def climbStairs(n):
        if n==1 or n==2:
            return n
        a=1;b=2;c=3
        for i in range(3,n+1):
            c=a+b;a=b;b=c
        return c
    

      

  • 相关阅读:
    Difference between application/xml and text/xml
    [转]ASP.NET MVC URL 路由简介
    js Unicode编码转换
    svn更改用户名
    招商银行开发成功国内业界第一个实用的数据仓库系统
    Response.ContentType 详细列表备忘使用(转载)
    WebClient UploadData UploadFile 用法
    char tchar wchar_t WCHAR LPCTSTR LPCWSTR
    网站测试自动化系统—系统应该有的功能
    网站测试自动化系统—收集测试结果
  • 原文地址:https://www.cnblogs.com/wwg945/p/8921779.html
Copyright © 2020-2023  润新知