Python算法_三种斐波那契数列算法
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=0,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*
本文章要解决的问题是:
1、求第n项斐波那契数列的值是多少(普通版)
根据通项公式递归求值,此种方法虽代码简洁却效率太低
1 def Fibonacci(n):
2 if n == 1: # 如果n=1,返回0
3 return 0
4 elif n == 2: # 如果n=2,返回1
5 return 1
6 else:
7 return Fibonacci(n-1) + Fibonacci(n-2) # 通项公式 F(N) = F(N-1) + F(N-2)
2、求第n项斐波那契数列的值是多少(快速版)
由于递归自顶向下的方式效率太低,我们采用自底向上的方式,先将数值正向放入列表中,最后从列表中取值。
1 def Fibonaccii(n):
2 seq = [0,1] # 初始列表怕[0,1]
3 if n == 1: # 如果n=1,返回[0]
4 return [0]
5 elif n == 2: # 如果n=2,返回[0,1]
6 return [0,1]
7 else:
8 for i in range(n-2): # 循环往列表中添加数列,初始已有两项故添加项数为n-2
9 seq.append(seq[i]+seq[i+1]) # 添加的数列值等于前两项的和
10 return seq[-1] # 取最后一项的值
3、给定终止值,生成此前斐波那契数列
随便给定一个数字,求不大于此数值的斐波那契数列
def Fibonacciii(n):
seq = [0,1] # 初始化列表
i = 0 # 初始i
if n == 0: # 如果n=0,返回列表[0]
return [0]
else:
if n <= 3: # 如果0<n<3
for i in range(n): # 循环往初始列表中添加斐波那契数列
seq.append(seq[i]+seq[i+1])
return seq
else: # 如果n > 3
while True: # 理论上当n 不确定时,需要添加的项数也是不确定的,故死循环
if seq[-1] <= n: # 一直添加,如果添加的最后一项不大于给定值
seq.append(seq[i]+seq[i+1])
i += 1 # 每次循环i 递增
continue # 继续循环,不执行以下代码
break # 当最后一项大于给定值时,跳出死循环
return seq[0:-1] # 最后返回去掉最后一个数值的斐波那契数列
4、求前n项斐波那契数列
1 def Fibonaccii(n):
2 seq = [0,1] # 初始化列表
3 if n == 1: # n=1,返回[0]
4 return [0]
5 elif n == 2: # n=2,返回[0,1]
6 return [0,1]
7 else:
8 for i in range(n-2): # n>2,循环添加数列到初始列表中
9 seq.append(seq[i]+seq[i+1])
10 return seq
Python算法_三种斐波那契数列算法的更多相关文章
- 算法导论-求(Fibonacci)斐波那契数列算法对比
目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...
- 算法 递归 迭代 动态规划 斐波那契数列 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- Python递归 — — 二分查找、斐波那契数列、三级菜单
一.二分查找 二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列. 二分查找: 1.首先,将表中间位置的元素与被查找元素比较,如果两者相等,查找结束,否 ...
- 【算法】Fibonacci(斐波那契数列)相关问题
一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...
- python基础练习题(题目 斐波那契数列II)
day16 --------------------------------------------------------------- 实例024:斐波那契数列II 题目 有一分数序列:2/1,3 ...
- 【算法】php实现斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21.这个数列从第3项开始,每一项都等于前两项之和. 根据这个定义,斐波那契数列的递推公式是:f(n)=f(n-1)+f(n ...
- 【python】迭代一列 斐波那契数列
def fabm(n): if n < 1: print('输入不能小于1') return -1 if n == 1 or n == 2: return 1 else: return fabm ...
- Python迭代与递归方法实现斐波拉契数列
首先是迭代的方法实现: def f(n): f1, f2, fn = 1, 1, 1 while n>2: fn = f1 + f2 f1 = f2 f2 = fn n = n - 1 retu ...
随机推荐
- (二)基于shard-jdbc中间件,实现数据分库分表
基于shard-jdbc中间件,实现数据分库分表 Sharding-JDBC简介 Sharding配置示意图 1.水平分割 1.1 水平分库 1.2 水平分表 2.Shard-jdbc中间件 2.1 ...
- Django(视图)
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...
- spark SQL (一)初识 ,简介
一, 简介 Spark SQL是用于结构化数据处理的Spark模块.与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息.在内部 ...
- labuladong 算法小抄
<labuladong的算法小抄官方完整版> 本书目前可以手把手带你解决 110 道 LeetCode 算法问题,而且在不断更 新,全部基于 LeetCode 的题目,涵盖了所有题型和技巧 ...
- 调试lcd时候给linux单板移植tslib
作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述 tslib背景: 在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触 ...
- Codeforces Round #673 (Div. 2) A. Copy-paste(贪心)
题目链接:https://codeforces.com/contest/1417/problem/A 题意 给出一个大小为 $n$ 的数组 $a$,每次操作可以选择两个数,然后将一个数加到另一个数上, ...
- Educational Codeforces Round 85 (Div. 2)
题目链接:https://codeforces.com/contest/1334 A. Level Statistics 题意 一个关卡有玩家的尝试次数和通关次数,按时间顺序给出一个玩家 $n$ 个时 ...
- java——API
API定义: 可以网上下载一个jdk_api文档用来查找一些函数. 匿名对象的创建 匿名对象做为返回值和参数实例: Random的使用:
- DNS 是什么?如何运作的?
前言 我们在上一篇说到,IP 地址的发明把我们纷乱复杂的网络设备整齐划一地统一在了同一个网络中. 但是类似于 192.168.1.0 这样的地址并不便于人类记忆,于是发明了 域名(Domain Nam ...
- 关于ucore实验一的资料查找
任务:阅读实验一makefile 搞清楚ucore.img是如何构建的 $@ $< $^ 这三个变量分别是什么意思 https://blog.csdn.net/YEYUANGEN/arti ...