首页 > 其他分享 >Fibnacci数列递归实现

Fibnacci数列递归实现

时间:2022-10-06 09:33:47浏览次数:52  
标签:斐波 数列 递归 Fibnacci fib 那契 fibnext

什么Fibnacci数列
通过查阅斐波那契数列,其中,它是这么说的:

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、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*)

总结而言,斐波那契数列从第三项开始,每一项的值都是前两项的和。

递归表达式
def fib(n):
return 1 and n <= 2 or fib(n - 1) +fib(n - 2)
print('%d'%(fib(10)))
python实现结果

尝试fib(100)、fib(1000)、fib(10000)
在尝试fib(100)的时候,我就放弃了,因为运行了好一会儿都没有运行出结果。100尚且如此,何况后面的大数字,我害怕把我的电脑搞崩,就强制停止了程序运行,自然肯定没有一分钟以内运行出结果了。

解决问题
以上是通过递归算法实现的斐波那契数列的运算,还有种是用非递归的方法,参考了Fibonacci数列的递归与非递归实现以及python 入门之斐波那契数列递归表达式算法和非递归算法
其中,第二篇博客中指出:

总结为什么使用递归方式实现算法很长时间算不出来的原因:
(1) 递归算法时间复杂度为:O(2^N)----太耗时间
(2) 非递归算法时间和空间复杂度都为:O(N)

代码如下:

{def fib(n):
last = 1
now = 1
fibnext = 1
for i in range(n):
if i < 2:
fibnext = 1
else:
fibnext = last + now
last = now
now = fibnext
return fibnext
}

print("%d"%(fib(10000))) #或fib(100)或fib(1000)
运行结果如下:



可以看到运行速度非常快,几乎是电光火石之间。

标签:斐波,数列,递归,Fibnacci,fib,那契,fibnext
From: https://www.cnblogs.com/TonySSS/p/16757039.html

相关文章

  • 【Vue3.x】全局组件、局部组件和递归组件
    全局组件没啥讲的,和vue2一样,常规是src下components文件夹下新建全局组件,然后去入口文件main.ts里注册全局组件。然后就能在全局使用了import{createApp}from'vue'i......
  • (函数)用递归实现求阶乘函数fact(n)的功能,即求1*2*……*n,运行后输出结果如下
    样例输入5 样例输出12 样例输入6 样例输出720 参考答案deffact(n):result=1foriinrange(1,n+1):result*=ireturnresultn=i......
  • 原始递归函数及模拟运行的优化
    看到网上一个题目,证明x开y次方是原始递归函数(primitiverecursivefunction)。这个问题并不难,只要把x开y次方实现出来即可。于是,正好把《递归论》相关内容补一补。【......
  • 理解递归与循环
    一、递归与循环的对比递归会带来大量的函数调用。这是不好的在计算环节特别大的前提下,递归就是不好的,因为递归是先调用,再计算。在大量计算的前提下可能会造成栈溢......
  • 函数的递归调用
    介绍:一个函数在函数体内又调用了本身,称之为递归调用例子:  ①当在函数main内调用test(4)时,执行判断if,由于4>2,执行test(n-1),此时n=4,则传值为test(3)②继续执行判断if......
  • Fibnacci数列
    Fibnacci数列Fibnacci数列定义斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子......
  • javaheima15 递归
    JavaFile作用创建对象定位文件,可以删除、获取文件信息等。但不能读写文件内容。构建对象的方式Filefile=newFile(“文件/文件/绝对路径/相对路径”);File类创......
  • 间距数列
    题目满足以下条件的长为\(n\)的整数序列\(a_1,a_2,\cdots,a_n\)有多少个?\(1\leqslanta_i\leqslantm\),\(1\leqslanti\leqslantn\)\(|a_i-a_{i+1}|\geqs......
  • 1214. 波动数列
    https://www.acwing.com/problem/content/1216/定义f[i][j]为考虑前i个d,余数为j的count数需要注意的是,根据理解推得的公式,有多种等效形式我这里为n*x+1*d1+2*d2+3*d3+.......
  • 第一季:5递归与迭代【Java面试题】
    第一季:5递归与迭代【Java面试题】​​前言​​​​推荐​​​​第一季:5递归与迭代​​​​题目​​​​递归​​​​循环迭代​​​​小结​​​​最后​​前言20229/3012......