用Python实现求Fibonacci数列的第n项

1. 背景——Fabonacci数列的介绍(摘自百度百科):

  斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……用公式定义如下:

计算通式为:

当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618

2. 用Python迭代实现求解Fibonacci数列的第n项

def fib_iter(n):
    n1 = 1
    n2 = 1
    n3 = 1

    if (n < 1):
        print("Wrong input! ")
        return -1
    else:
        while (n-2) > 0:
            n3 = n2 + n1
            n1 = n2
            n2 = n3
            n -= 1

    return n3

result = fib_iter(35)
if result != -1:
    print(result)

优点:当n数值较大时,求解速度较递归法快

缺点:代码不简洁易懂

3. 用Python递归实现求解Fibonacci数列的第n项

def fib_re(n):
    result = 0
    if(n < 1):
        print("Wrong input! ")
        return -1
    else:
        if(n == 1 or n == 2):
            return 1
        else:
            return fib_re(n-1) + fib_re(n-2)

result = fib_re(35)
if result != -1:
    print(result)

#分治思想

优点:代码简洁易懂

缺点:当n数值较大时,反复的出栈和压栈操作使得运行时间很长

时间: 2024-10-08 03:55:54

用Python实现求Fibonacci数列的第n项的相关文章

求Fibonacci数列的第n项

题目: 定义Fibonacci数列如下: 方法一: 递归的方法,代码如下: #include<iostream> using namespace std; int Fibona(int n) { int m; if (n == 0) return 0; else if (n == 1 || n == 2) return 1; else { m = Fibona(n - 1) + Fibona(n - 2); return m; } } int main() { cout << &q

c语言:用数组来处理求Fibonacci数列问题

用数组来处理求Fibonacci数列问题. 解:程序: #include<stdio.h> int main() { int i, f[20] = { 1,1 };//对最前面两个元素f[0]和f[1]赋初值1 for (i = 2; i < 20; i++) { f[i] = f[i-2]+f[i-1];//先后求出f[2]~f[19]的值 } for (i = 0; i<20; i++) { if (i % 5 == 0)//控制每输出5个数后换行 { printf("

C++项目参考解答:求Fibonacci数列

[项目:求Fibonacci数列] Fibonacci数列在计算科学.经济学等领域中广泛使用,其特点是:第一.二个数是1,从第3个数开始,每个数是其前两个数之和.据此,这个数列为:1 1 2 3 5 8 13 21 34 55 89 --,请设计程序,输出这个数列,直到这个数字超过10000. [提示]数列可以表示为: {f1=f2=1fn=fn?1+fn?2,n>2 [参考解答] #include <iostream> using namespace std; int main( )

【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。

第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归和非递归的 下面的代码有个问题,没有考虑大数越界.返回值应该设成long long型的 递归速度非常慢 /* 第 19 题(数组.递归): 题目:定义 Fibonacci 数列如下: / 0 n=0 f(n)= 1 n=1 / f(n-1)+f(n-2) n=2 输入 n,用最快的方法求该数列的第

16.O(logn)求Fibonacci数列

http://zhedahht.blog.163.com/blog/static/25411174200722991933440/ http://blog.csdn.net/foolishwolf_x/article/details/8774874 log(n)时间求a^n. 代码如下: #include "stdafx.h" #include <iostream> using namespace std; /* f(0) = 0. f(1) = 1. f(N) = f(N

迭代法求fibonacci数列--简单

// 迭代法求fibonacci数列 public class p52 { public static void main(String[] args) { int f1=1,f2=1; for(int i=1;i<=18;i++) { System.out.print(f1+"\t"+f2+"\t"); if(i%3==0) System.out.println(); f1=f1+f2;    //迭代法求fibonacci数列 f2=f2+f1; } }

poj 3070 Fibonacci(矩阵快速幂求Fibonacci数列)

题目链接: http://poj.org/problem?id=3070 题意: 我们知道斐波那契数列0 1 1 2 3 5 8 13-- 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. 思路: 这里的n很大,有10^9,for一遍肯定是不可以的. 所以要用矩阵乘法求斐波那契数列. f[n+1] = f[n]+f[n-1] f[n] = f[n] 构造以下矩阵,n次幂,mat[1][0] 就是答案 1 1 1 0 求矩

用数组求Fibonacci数列

#include<stdio.h>int main(){      int a[20]={1,1};      int n=2,i;      for(n=2;n<20;n++)         {             a[n]=a[n-1]+a[n-2];         }       for(i=0;i<20;i++)         {             if(i%5==0)             printf("\n");         

求fibonacci数列 java

java 和 c 差不多.但是java可以根据需求定义数组. 我还不会java的函数调用,所以用数组的方法. 1 import java.util.Scanner; 2 public class fibon{ 3 public static void main(String[] args){ 4 Scanner input=new Scanner (System.in); 5 int i,n; 6 n=input.nextInt(); 7 int[] arr=new int[n]; 8 arr[