一种快速求fibonacci第n个数的算法
利用动态规则的思路,摒弃传统的递归做法,可以得到一种快速的求fibonacci第n个数的算法:
'''
求第n(从1开始)位fibonacci数
fibonacci数列前两位为0, 1. 后面每一位数字等于前两位数字之和
'''
def fibonacci( n ):
if n <= 2:
return n - 1
f = 0
g = 1
while n - 2 > 0:
g = g + f
f = g - f
n -= 1
return g print( fibonacci( 100 ) )
'''
与上述函数等价的递归写法
'''
def fib_iter( f, g, n ):
if n <= 0:
return g
else:
return fib_iter( g, f + g, n - 1 ) def fib( n ):
if n <= 2:
return n - 1
return fib_iter( 0, 1, n - 2 ) print( fib( 100 ) )
两者原理一样, 但递归形式在计算fib(1000)的时候就超出python最大递归数量了, 所以推荐循环写法.
结果是218922995834555169026
一种快速求fibonacci第n个数的算法的更多相关文章
- [笔记] 一种快速求 1 ~ n 逆元的方法
		
我们现在要求1~n在mod m意义下的逆元(n<m,m为素数). 对于一个[1,n]中的数i,我们令\(k=\lfloor\frac{m}{i}\rfloor,r=m \ mod \ i\) 然 ...
 - 快速求出n!的质因数的个数
		
一般做组合数的题目都要进行质因数的分解,我们一般是for循环对每个数进行质因数分解,大多数情况都不会超时,但极少数的情况下,题目会不允许这样的做法,所以我们需要学会一种更快的方法来求质因数. 我们一般 ...
 - 算法导论-求(Fibonacci)斐波那契数列算法对比
		
目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...
 - [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数
		
Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...
 - 快速求n的质因子(数论)
		
快速求n的质因子 如何尽快地求出n的质因子呢?我们这里又涉及两个好的算法了! 第一个:用于每次只能求出一个数的质因子,适用于题目中给的n的个数不是很多,但是n又特别大的 #include<std ...
 - 用PL0语言求Fibonacci数列前m个中偶数位的数
		
程序说明:求Fibonacci数列前m个中偶数位的数: 这是编译原理作业,本打算写 求Fibonacci数列前m个数:写了半天,不会写,就放弃了: 程序代码如下: var n1,n2,m,i; pro ...
 - 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
		
作者:何海涛 出处:http://zhedahht.blog.163.com/ 题目:定义Fibonacci数列如下: / 0 n=0 f(n)= ...
 - 【GDOI 2011 DAY2 T3】零什么的最讨厌了 (快速求阶乘、中国剩余定理)
		
问题描述: 林记在做数学习题的时候,经常遇到这种情况:苦思冥想了很久终于把问题解出来,结果发现答案是0,久而久之林记在得到习题答案是0的时候就没有了做出一道难题的成就感.于是林记决定:以后出题,答案一 ...
 - 快速求幂(Quick Exponentiation)
		
接触ACM没几天,向各路大神求教,听说ACM主要是研究算法,所以便开始了苦逼的算法学习之路.话不多说,RT所示,学习快速求幂. 在头文件<math.h>或是<cmath>中,d ...
 
随机推荐
- 游戏设计模式:Subclass Sandbox模式,以及功能方法集的设计思考
			
书中总结出这种 Subclass Sandbox 的设计模式 Game Design Patterns: Subclass Sandbox 这种模式要点有两点: 在基类中实现各种功能性方法供子类调用 ...
 - oracle检查点checkpoint信息
			
1.关于checkpoint的概述 checkpoint是oracle在数据库一致性关闭.实例恢复和oracle基本操作中不可缺少的机制,包含以下相关的含义: A.检查点的位置(checkpoint ...
 - LeetCode题解——Roman to Integer
			
题目: 将罗马数字转换为整数. 解法: 可以参考上一篇数字转换为罗马数字的规则. 代码: class Solution { public: int sym2int(char sym) //罗马数字字符 ...
 - bzoj 2555 SubString(SAM+LCT)
			
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2555 [题意] 给定一个字符串,可以随时插入字符串,提供查询s在其中作为连续子串的出现 ...
 - warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
			
最近在编译库文件后,使用它做APP,遇到如下问题: 1>LIBCMT.lib(invarg.obj) : error LNK2005: __pInvalidArgHandler 已经在 LIBC ...
 - ehcache 的配置
			
配置:一.在src目录下加入ehcache.xml: <cache name="SimplePageCachingFilter" maxElementsInMemory=&q ...
 - Java Thread.interrupt 害人! 中断JAVA线程(zz)
			
http://www.blogjava.net/jinfeng_wang/archive/2012/04/22/196477.html#376322 ————————————————————————— ...
 - struts2+Hibernate4+spring3+EasyUI环境搭建之四:引入hibernate4以及spring3与hibernate4整合
			
1.导入hibernate4 jar包:注意之前引入的struts2需要排除javassist 否则冲突 <!-- hibernate4 --> <dependency> & ...
 - 关于Aazure 使用以前保留的vhd创建虚拟机的基本步骤
			
1. 删除vm保留vhd(只删除虚拟机记录,不删除磁盘)2. 拷贝vhd以及status文件到指定的存储账号3. 使用拷贝的VHD创建disk4. 从disk创建vm,指定指定vnet以及cloud ...
 - Gradle – Spring 4 MVC Hello World Example – Annotation
			
In this tutorial, we will take the previous Gradle + Spring MVC XML example, rewrite it to support @ ...