zoukankan      html  css  js  c++  java
  • python基础练习题(斐波那契数列)

    day4

    ---------------------------------------------------------------

    实例006:斐波那契数列

    题目 斐波那契数列。

    题目没说清楚,大概说的是输出制定长度的数列吧,想了想实现如下:

     1 a = int(input("请输入斐波那契数列位数:"))
     2 list = []
     3 for i in range(a):
     4     if i <2:
     5         list.append(i)
     6     else:
     7         list.append(list[i-2]+list[i-1])
     8         if len(list)==a:
     9             print(list)
    10             break

    看了代码量也还行,下面看看标准答案:

    1 def Fib(n):
    2     Fibona = [0,1]
    3     if n>1:
    4         [Fibona.append(Fibona[i-1]+Fibona[i-2]) for i in range(2,n)]
    5     return Fibona
    6 n = int(input("请输入需要的斐波那契数列长度n:"))
    7 print(Fib(n)[0:n])

    标准答案用了列表推导式,确实比我的好理解,代码也精简。。。,再来一个经典的:

    1 fibs = [0,1]
    2 num = int(input("请输入需要的斐波那契数列长度: "))
    3 for i in range(num-2):
    4     fibs.append(fibs[-2]+fibs[-1])
    5 print(fibs)

    很惊艳,很巧妙吧,最后看看递归的:

     1 def recur_fibo(n):
     2     if n <= 1:
     3         return n
     4     else:
     5         return (recur_fibo(n - 1) + recur_fibo(n - 2))
     6 nterms = int(input("您要输出几项? "))
     7 list = []
     8 for i in range(nterms):
     9     list.append(recur_fibo(i))
    10 print(list)

    从网上的资料来看,递归的性能比不上循环的,但是看起来很方便,递归一般存在以下特点(python的递归最大深度是1000):

    1、必须有一个明确的结束条件
    2、每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少
    3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
  • 相关阅读:
    怪怪设计论闲谈篇:职责与解耦的矛盾
    知识传播与社区讨论 : 兜售狗皮膏药的"软件先知"
    反弹和补遗:再论Bjarne Stroustrup的"基于对象"的含义
    回帖整理: 领域建模/表模块,Java/.NET 社区风格
    贫血或职责的讨论
    近期可能会研究和讨论的个人动向
    CLR寄宿(上) MSCOREE.DLL
    代码组(2) 成员条件
    说说emit(中)ILGenerator
    CLR寄宿(下) 托管宿主
  • 原文地址:https://www.cnblogs.com/qgc1995/p/14783261.html
Copyright © 2011-2022 走看看