zoukankan      html  css  js  c++  java
  • 斐波那契数

    import time
    
    #递归算法求第n个斐波那契数,时间复杂度为O(2^n)
    def f1(n):
      if n<=1:
        return n
      else:
        return f1(n-1)+f1(n-2)
    
    #迭代算法求斐波那契数,时间复杂度为O(n),空间复杂度为O(1)
    def f2(n):
      r1,r2,i=0,1,3
      if n<2:
        return n
      else:
        while i<=n:
          r=r1+r2
          r1,r2,i=r2,r,i+1
        return r
        
    #利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数
    def f3():
      r1,r2,r,count=int(0),int(1),int(1),2
      while r1<=r:
        r=r1+r2
        r1,r2,count=r2,r,count+1
      return count
    #python支持大数计算,所以这里采取溢出方法算不出来
      
    #采用递归算法,计算机在1,5,10,50秒内计算出的最大斐波那契数是第几个
    def f4(t):
      t1,i=time.time(),3
      while time.time()-t1<=t:
        i=i+1
        f1(i)
      print(t,"秒内计算出的斐波那契数是第",i,"")
        
    #采用迭代算法,计算机在1,5,10,50秒内计算出的最大斐波那契数是第几个
    def f5(t):
      t1,count=time.time(),2
      r1,r2,r=0,1,1
      while time.time()-t1<=t:
        r=r1+r2
        r1,r2=r2,r
        count=count+1
      print(t,"秒内计算出的斐波那契数是第",count,"")
      return count
    
        
    print("1:递归算法求第n个斐波那契数;
    2:迭代算法求第n个斐波那契数;
    3:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数;
    4:采用递归算法,计算机在1,5,10,50秒内计算出的最大斐波那契数是第几个;
    5:采用迭代算法,计算机在1,5,10,50秒内计算出的最大斐波那契数是第几个;
    6:退出;")
    t=0
    while t!=6:
      t=int(input("请输入选择的序号:"))
      if t==1:
        num=int(input("1、递归算法求第n个斐波那契数:请输入n:"))
        print("",num,"个斐波那契数是:",f1(num-1))
        continue
      elif t==2:
        num=int(input("2、迭代算法求第n个斐波那契数:请输入n:"))
        print("",num,"个斐波那契数是:",f2(num))
        continue
      elif t==3:
        print("利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第",f3(),"个斐波那契数")
        continue
      elif t==4:
        t=int(input("请输入秒数:"))
        f4(t)
        continue
      elif t==5:
        t=int(input("请输入秒数:"))
        f5(t)
        continue
      else:
    continue

    题目:

    1:用递归和迭代算法求第n个斐波那契数;
    2:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数;
    3:采用递归和迭代算法,计算机在1,5,10,50秒内计算出的最大斐波那契数是第几个;

    困惑解决:

    其中寻找不超过环境支持的最大整数的斐波那契数:思路是将数字定义为int,当不断累加时会溢出,使得r变为负数,此时结束循环。但是Python支持大数计算,也就是当数字小于int范围时是int型,但当数字大于int时Python会自动把数字变为long型。由于Python自带大数计算,所以不存在溢出,只要内存足够

    虽然递归算法简单,但是时间复杂度为O(2^n),递归树以2的n次方扩大,而且中间会有很大部分是重复计算,比较耗时

    但是迭代算法时间复杂度是O(n),空间复杂度也只有O(1),所以比递归算法快很多

  • 相关阅读:
    CSS 中 nth-child 和 nth-of-type 的区别
    Git HTTPS 方式自动保存用户名密码
    nginx 配置代理某个路径
    VS Code 常用插件列表
    安装node-sass的正确姿势【转】
    MongoDB 3.4.2 配置 CentOS 6.5 远程连接
    CentOS 6.5 升级 PHP 到5.6
    常用正则表达式整理[JavaScript]
    nginx提示413 Request Entity Too Large解决方法
    Linux远程执行Shell命令或脚本
  • 原文地址:https://www.cnblogs.com/rainbowdawn/p/7886121.html
Copyright © 2011-2022 走看看