数列-Fibonacci

关于本篇博文

作者 北屿 http://www.cnblogs.com/beiyuoi/

转载请保留该文字


写在前面

关于Fibonacci的定义和性质等总结。


更新记录

20160617-Fibonacci定义及通项公式


定义

\[Fibonacci_n=Fibonacci_{n-1}+Fibonacci_{n-2}\]

特别的 \(Fibonacci_0=0,Fibonacci_1=1\)


通项公式及推导

  • 通项公式

\(F_n=\frac{1}{\sqrt{5}}(\frac{1+\sqrt{5}}{2})^n-\frac{1}{\sqrt{5}}(\frac{1-\sqrt{5}}{2})^n,n\geq 0\)

  • 推导

设 \(F^n=q^n\) ,忽略 \(F_0=0,F_1=1\) 的限制,由Fibonacci递推式 \(F_n=F_{n-1}+F_{n-2}\) 得到

\(q^n-q^{n-1}-q^{n-2}=0,n\geq 2\)

\(q^{n-2}(q^2-q-1)=0\)

我们知道 \(q^{n-2}\) 不能为\(0\) ,则 \(q^2-q-1=0\) , \(q\) 为方程 \(x^2-x-1=0\) 的解

\(q=(\frac{1+\sqrt{5}}{2})\) 或 \(q=(\frac{1-\sqrt{5}}{2})\)

即 \(F_n=(\frac{1+\sqrt{5}}{2})^n\) 和 \(F_n=(\frac{1-\sqrt{5}}{2})^n\)

两者都是关于递推式\(F_n=F_{n-1}+F_{n-2}\) 的解

设 \(F_n=c_1(\frac{1+\sqrt{5}}{2})^n+c_2(\frac{1-\sqrt{5}}{2})^n\)

由 \(F_0=0,F_1=1\)  得到方程组

\[\begin{cases}c_1+c_2=0\\c_1(\frac{1+\sqrt{5}}{2})+c_2(\frac{1-\sqrt{5}}{2})=1\end{cases}\]

解得 \(\begin{cases}c_1=\frac{1}{\sqrt{5}}\\c_2=-\frac{1}{\sqrt{5}}\end{cases}\)

即Fiboncci数列的通项公式为 \[F_n=\frac{1}{\sqrt{5}}(\frac{1+\sqrt{5}}{2})^n-\frac{1}{\sqrt{5}}(\frac{1-\sqrt{5}}{2})^n,n\geq 0\]


参考文献

  • 《组合数学 (原书第5版) 》 Richard A.Brualdi
时间: 2024-07-29 00:13:07

数列-Fibonacci的相关文章

python实现斐波那契数列(Fibonacci sequence)

使用Python实现斐波那契数列(Fibonacci sequence) 斐波那契数列形如 1,1,2,3,5,8,13,等等.也就是说,下一个值是序列中前两个值之和.写一个函数,给定N,返回第N个斐波那契数字.例如,1返回1 6返回8 我选择了两种方法,一种是将list变成一个队列,另一个则是使用环形队列.不多说,直接上代码:后面我会对为什么这样实现做一个解释 第一个是使用队列的方式: 1 def fibonacciSeq(num): 2 fibonacciSeqList = [] 3 for

【费式数列(Fibonacci数列)】

/* 说明: Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:若有一只兔子每个月生一只小兔子,一个月后也开 始生产.起初只有一只兔子,一个月后就有两只兔子,二个月后就有三只兔子,三个月后有五只兔子(小兔子投入 生产)…… 如果不太理解这个例子的话,举个图就知道了,注意新生的小兔子需一个月成长期才会投入生产,类似的道理也可 以用于植物生长这就是Fibonacci数列,一般习惯称之为费式数列,例如一下:1,1,2,3,5,8,13,21,34, 55,89 解法: 我们可以讲费式

Java实现斐波那契数列Fibonacci

import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); System.out.println("斐波那契数列的个数是:"); int total=in.nextInt(); System.out.println("

练习六:斐波那契数列(fibonacci)

题目:斐波那契数列. 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. 在数学上,斐波那契数列是以递归的方法来定义: F0 = 0 (n=0)F1 = 1 (n=1)Fn = F[n-1]+ F[n-2](n=>2)--------------------- 方法一:使用递归计算 1 def fibonacci(month): 2 if month == 1: 3 return 1 4 el

斐波拉契数列(Fibonacci) 的python实现方式

第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... 1 >>> fibs = [0,1] 2 >>> for i in range(8): 3 fibs.append(fibs[-2] + fibs[-1]) 4 5 >>> fibs 6 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 或者说输入一个动态的长度: 1fibs = [0,1] 2num = i

poj3070_斐波那契数列(Fibonacci)

用矩阵求斐波那契数列,快速幂log(n),只用求最后4位(加和乘的运算中前面的位数无用) 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 /* 7 (x y)(x y)= (x*x+y*s x*y+y*t) =(x*x+y*s y*(x+t)) 8 (s t)(s t) (s*x+t*s s*y+t*t) (s*(x+t) t*t+y*s) 9 (x y)(a b)= (x*a+y*c x*b+y*d)

C# 4种方法计算斐波那契数列 Fibonacci

F1: 迭代法 最慢,复杂度最高 F2: 直接法 F3: 矩阵法 参考<算法之道(The Way of Algorithm)>第38页-魔鬼序列:斐波那契序列 F4: 通项公式法 由于公式中包含根号5,无法取得精确的结果,数字越大误差越大 1 using System; 2 using System.Diagnostics; 3 4 5 namespace Fibonacci 6 { 7 class Program 8 { 9 static void Main(string[] args) 1

使用循环解决斐波那契数列Fibonacci sequence

1 # encoding:utf-8 2 ''' 3 Created on 2017年8月7日 4 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 5 小兔子长到第三个月后每个月又生一对兔子, 6 假如兔子都不死,问每个月的兔子总数为多少? 7 知识链接: 8 1.在使用函数传递变量时不要同全局变量的名称一样 9 2.全局变量在函数中使用时,需要用 global声明 10 @author: wangtaoyuan 11 ''' 12 new = 1#刚出生的小兔子对数 13

c#斐波那契数列(Fibonacci)(递归,非递归)

public static int Foo(int i)        {            if (i < 3)            {                return 1;            }            else            {                return Foo(i - 1) + Foo(i - 2);            }        } static void Main(string[] args)        {