斐波那契数列

斐波那契数列

  • 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果

  • 代码实现:

int fibonaccil(int n)//递归实现
{
    if(n==0||n==1)return n;
    else return (fibonaccil(n-2)+fibonaccil(n-1));
}
//实际测试中发现当N达到48就会发生溢出,所以如果要计算比较大的Fibonacci数列就需要用数组来模拟加法
int fibonaccil(int n)//递归转换为递推实现
{
    int fib0=1,fib1=1,fib=0;
    if(n<=1)return 1;
    for(int i=0;i<n-1;i++)
    {
        fib=fib0+fib1;
        fib0=fib1;
        fib1=fib;
    }
    return fib;
}
#python3递归在实际的运行中效果极其差,我测试了一下Fibonacci(60),在我的PC机器上运行,CPU I7-6700HQ,运行超过12分钟也
#没有计算出结果
def fibonaccil(n):     #level 1:
    if(n==0 or n==1):
        return n
    return (fibonaccil(n-2)+fibonaccil(n-1))

def Fibonacci(n):      #level 10:
#python3递推实际测试Fibonacci(1000000) 用时17s,python存在长整形,内部实现是模拟数组类似,存储上限和内存有关系。
    fib0=1
    fib1=1
    if n<=1:
        return 1
    i=0
    while i<n-1:
        i+=1
        fib2=fib0+fib1
        fib0=fib1
        fib1=fib2
    return fib2

def fibonaccil(n):     #level 99:
#实际测试Fibonacci(1000000) 用时2s,emmm,性能max 参考博客 http://blog.csdn.net/ncafei/article/details/54176276
 lhm=[[0,1],[1,1]]
 rhm=[[0],[1]]
 em=[[1,0],[0,1]]
 #multiply two matrixes
 def matrix_mul(lhm,rhm):
  #initialize an empty matrix filled with zero
  result=[[0 for i in range(len(rhm[0]))]for j in range(len(rhm))]
  #multiply loop
  for i in range(len(lhm)):
   for j in range(len(rhm[0])):
    for k in range(len(rhm)):
     result[i][j]+=lhm[i][k]*rhm[k][j]
  return result

 def matrix_square(mat):
  return matrix_mul(mat,mat)
 #quick transform
 def fib_iter(mat,n):
  if not n:
   return em
  elif(n%2):
   return matrix_mul(mat,fib_iter(mat,n-1))
  else:
   return matrix_square(fib_iter(mat,n/2))
 return matrix_mul(fib_iter(lhm,n),rhm)[0][0]

另外附上Github的链接 https://github.com/yesbutter/HBU-DS-Learning/edit/master/Unit%201/Fibonacci.md

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值