python实现斐波那契数列的方法示例

介绍

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下递归的方法定义:

F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

1. 元组实现

fibs = [0, 1]
for i in range(8):
 fibs.append(fibs[-2] + fibs[-1])

这能得到一个在指定范围内的斐波那契数列的列表。

2. 迭代器实现

class Fibs:
 def __init__(self):
  self.a = 0
  self.b = 1

 def next(self):
  self.a, self.b = self.b, self.a + self.b
  return self.a

 def __iter__(self):
  return self

这将得到一个无穷的数列,可以采用如下方式访问:

fibs = Fibs()
for f in fibs:
 if f > 1000:
  print f
  break
 else:
  print f

3. 通过定制类实现

class Fib(object):
 def __getitem__(self, n):
  if isinstance(n, int):
   a, b = 1, 1
   for x in range(n):
    a, b = b, a + b
   return a
  elif isinstance(n, slice):
   start = n.start
   stop = n.stop
   a, b = 1, 1
   L = []
   for x in range(stop):
    if x >= start:
     L.append(a)
    a, b = b, a + b
   return L
  else:
   raise TypeError("Fib indices must be integers")

这样可以得到一个类似于序列的数据结构,可以通过下标来访问数据:

f = Fib()
print f[0:5]
print f[:10]

4.Python实现比较简易的斐波那契数列示例

先放一个斐波那契数列出来瞧瞧…

0 1 1 2 3 5 8 13 21 34 55 89 144 233...

首先给头两个变量赋值:

i, j = 0, 1

当然也可以这样写:

i = 0
j = 1

接着定个范围,就10000之内好了:

while i < 10000:

然后在while语句中输出i并设计逻辑:

 print i,
 i, j = j, i+j

在这里需要注意:“i, j = i, i+j”这条代码不能写成如下所示:

i = j
j = i+j

如果写成这样,j就不是前两位相加的值,而是已经被j赋过值的i和j相加的值,这样的话输出的数列会如下所示:

0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192

正确的整片代码如下所示:

i, j = 0, 1
while i < 10000:
 print i,
 i, j = j, i+j

最后展示运行结果:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

总结

以上就是关于利用Python实现斐波那契数列的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • php实现斐波那契数列的简单写法

    斐波那契数列是非常常见的一类数列,其数学定义为:F0=1,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*).本文就用php来简单实现斐波那契数列,代码十分简洁易懂,如下所示: <?php $arr[1] = 1; for($i = 2;$i < 100;$i++) { $arr[$i] = $arr[$i-1] + $arr[$i-2]; } echo join(",",$arr);//将数组合并为一个字符串输出 ?> 至此就实现了Fn=F(n-

  • C语言使用普通循环方法和递归求斐波那契序列示例代码

    复制代码 代码如下: #include <stdio.h> int fac(int x); int main(void){    int n;    scanf("%d", &n);    if (n == 1 || n == 2)        printf("1\n");    else if (n == 3)        printf("2\n");    else    {        int last = 1; 

  • php处理斐波那契数列非递归方法

    我自己构思了下,实际上程序来解决这个事情,就是一个偏移量的问题.首先看数列::1.1.2.3.5.8.13.21.34数列的下一个数是前2个数字之和,以此类推. 程序处理的话,实际上就是一个FOR语句,传统FOR语句是for($i=1;$i;$count,$i++),这里的偏移量是$i=$i+1.如果处理这个数列的话,这个偏移量就不是1了,是前1个数字.那么当你for的时候,一个变量记录上一个数字,另外一个记录当前数字,偏移量为这上一个数字,然后在循环中重新赋值,将上一个数字记录成当然循环值,以

  • c#斐波那契数列(Fibonacci)(递归,非递归)实现代码

    //Main 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Fibonacci{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Would you like to know which

  • python实现斐波那契递归函数的方法

    本文以一个简单的实例讲述了python实现斐波那契数列数列递归函数的方法,代码精简易懂.分享给大家供大家参考之用. 主要函数代码如下: def fab(n): if n==1: return 1 if n==0: return 0 else: result=int(fab(n-1))+int(fab(n-2)) return result 测试代码如下: for i in range(10): print fab(i) 希望本文所述对大家Python程序设计的学习有所帮助.

  • C++输出斐波那契数列的两种实现方法

    定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那契数列的前20项为例: 方法一:比较标准的做法,是借助第三个变量实现的. 复制代码 代码如下: #include<iostream>  using namespace std;int main(){    int f1=0,f2=1,t,n=1;    cout<<"数列第1个

  • 求斐波那契(Fibonacci)数列通项的七种实现方法

    一:递归实现使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1.二:数组实现空间复杂度和时间复杂度都是0(n),效率一般,比递归来得快.三:vector<int>实现时间复杂度是0(n),时间复杂度是0(1),就是不知道vector的效率高不高,当然vector有自己的属性会占用资源.四:queue<int>实现当然队列比数组更适合实现斐波那契数列,时间复杂度和空间复杂度和vector<int>一样,但队列太适合这里了,

  • 用Python实现斐波那契(Fibonacci)函数

    Fibonacci斐波那契数列,很简单,就是一个递归嘛,学任何编程语言可能都会做一下这个. 最近在玩Python,在粗略的看了一下Learning Python和Core Python之后,偶然发现网上有个帖子Python程序员的进化写的很有意思.于是打算仿照一篇,那篇帖子用了十余种方法完成一个阶乘函数,我在这里会用九种不同的风格写出一个Fibonacci函数. 要求很简单,输入n,输出第n个Fibonacci数,n为正整数 下面是这九种不同的风格: 1)第一次写程序的Python程序员: de

  • python求斐波那契数列示例分享

    复制代码 代码如下: def getFibonacci(num): res=[0,1] a=0 b=1 for x in range(0,num):  if x==a+b:   res.append(x)   a,b=b,a+b return res res=getFibonacci(1000)print(res) #递归a=[0,1]qian=0def fibna(num,qian): print(num) he=num+qian if he<1000:  a.append(he)  qian

  • java实现斐波那契数列的3种方法

    先说说为什么写这个吧,这个完全是由去阿里巴巴面试引起的一次惨目忍睹的血案.去面试的时候,由于面试前天晚上11点钟才到阿里巴巴指定面试城市,找到旅馆住下基本都1点多,加上晚上完全没有睡好,直接导致第二天面试效果很不好(对于那些正在找工作的大虾们不要向小虾一下悲剧,提前做好准备还是很重要滴),面试大概进行了一个多小时(面试结束回去的时候基本走路都快睡着了,悲催!!),面试快结束的时候面试官问的我问题就是关于费波那西数列,当时头脑完全浆糊,只知道要设置三个变量或者用List先初始化,当写到for循环的

随机推荐