斐波那契

Java查找算法

别来无恙 提交于 2020-02-04 20:36:54
查找算法 一、概述 顺序(线性)查找 二分查找(折半查找) 插值查找 斐波那契查找 二、线性查找 说明 : 找到元素返回下标,若没有找到则返回-1 此处找到一个满足要求的就返回 /** * @author DELL * @Date 2020/2/3 17:53 **/ public class SequenceSearch { public static void main ( String [ ] args ) { int [ ] arr = { 3 , 67 , 2 , 0 , 9 , 56 , 35 } ; int index = seqSearch ( arr , 0 ) ; if ( index == - 1 ) { System . out . println ( "没有此元素!" ) ; } else { System . out . println ( "该元素下标为:" + index ) ; } } /** * 找到一个满足要求的就返回下标,否则返回-1 * * @param arr * @param value * @return */ public static int seqSearch ( int [ ] arr , int value ) { for ( int i = 0 ; i < arr . length ; i ++ ) { if (

优化(1159斐波那契数)

好久不见. 提交于 2020-01-31 16:37:04
最近在网课学习中 了解了一些基本算法 其中在递归算法时 在无优化递归斐波那契时 程序效率低 因为许多数在之前已经被算过一遍了 所以使用记忆化搜索优化 #include<iostream> #include<cstring> #include<Windows.h> using namespace std; int flog(int v); int s[1000]; int main() { int n,k; cin>>n; DWORD startTime=GetTickCount(); k=flog(n); DWORD endTime=GetTickCount(); cout<<k<<" "<<endTime-startTime; } int flog(int v) { if(v==1) return 0; if(v==2) return 1; if(s[v]==0) s[v]=flog(v-1)+flog(v-2); return s[v]; } 对比不经过优化的 #include<iostream> #include<Windows.h> using namespace std; int flog(int v); int main() { int n,k; cin>>n; DWORD startTime=GetTickCount(); k=flog(n); DWORD

斐波那契额数列及青蛙跳台阶问题

半世苍凉 提交于 2020-01-30 12:00:33
题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。 斐波那契(Fibonacci)数列定义如下: 效率很低的解法: long long Fibonacci_Solution1(unsigned int n) { if(n <= 0) return 0; if(n == 1) return 1; return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2); } 改进的算法:从下往上计算。首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)。。。。。依此类推就可以算出第n项了。很容易理解,这种思路的时间复杂度是o(n)。实现代码如下: long long Fibonacci(unsigned n) { int result[2] = {0 , 1}; if(n < 2) return result[n]; long long fibMinusOne = 1; long long fibMinusTwo = 0; for(unsigned int i = 2 ; i <= n ; ++i) { fibN = fibMinusOne + fibMinusTwo; fibMinusTwo = fibMinusOne; fibMinusOne = fibN; } return

历届试题 斐波那契

北城以北 提交于 2020-01-29 20:41:32
历届试题 斐波那契 折磨自己3天的题目终于解决啦 再不解决的话,小编我可就要疯了 这个过程相当的折磨人,啊啊啊 递归,记忆化递归,动态规划在这题数据规模面前只能跪拜呢! (上述方法链接这里: 点击可看 ) 最终的解决方法是大佬的矩阵快速幂+斐波那契性质+分类讨论,看着就觉得可怕(⊙o⊙)… ACdreamers大佬的思路讲解 emmm,不过大佬的代码我放在蓝桥杯没有通过… 好在不止我一个人在奋斗啊,还有一位学习大佬,看过ACdreamers大佬的博客改写过代码,我放在蓝桥杯试了完美通过!(点击可看哦! 学习大佬的链接奉上! ) 关于矩阵快速幂的学习:见我上两篇博客! 矩阵快速幂求斐波那契第n项 与 学习矩阵快速幂 说了这么多,上题目 问题描述   斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 … (x=1,2)   f(x) = f(x-1) + f(x-2) … (x>2) 对于给定的整数 n 和 m,我们希望求出:   f(1) + f(2) + … + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。   公式如下    但这个数字依然很大,所以需要再对 p 求模。 输入格式   输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18) 输出格式   输出为1个整数,表示答案 样例输入 2 3 5 样例输出 0

聊一聊斐波那契螺旋

吃可爱长大的小学妹 提交于 2020-01-26 23:41:51
斐波那契螺旋(也称为黄金螺旋)是根据斐波那契数列得到的一种螺旋。 斐波那契数列是这样一种数列:1,1,2,3,5,8……,从第三项开始,每一项的数字是前两项数字之和。以这些数字为半径,连续绘制圆弧就可以得到如下面的斐波那契螺旋: 按照等距螺旋对螺旋的运动方式的解释,螺旋应由圆周运动与直线运动相叠加而产生,两种运动的速度比为固定值时,会形成等距离外扩的螺旋(简称 等距螺旋 ,也称 等速度比螺旋 )。当速度比不固定时,螺旋会呈现出外扩幅度不断增大(或缩小)的特征。 斐波那契螺旋每一个旋转周期外扩的幅度都在增大,因此,它的速度比是在不断变化的。通过图形观察可以发现,斐波那契螺旋可以看作是基圆半径为1,扩张而成的螺旋。从半径为2的圆弧开始,可以找到下面的一组纯偶数数列:2,4,6,10,16,26……。 这组数列从第3项开始,每一项数字同样是前两项数字之和。百度“斐波那契数列”词条中有提到,类似的数列称为斐波那契—卢卡斯数列,所以这不是一项很特殊的发现。我们感兴趣的是直线运动与圆周运动在斐波那契螺旋中的具体体现和运动特点。 按照上面纯偶数数列在螺旋中的位置关系,我们可以发现,从圆弧半径2变化到4时,圆周旋转了90度,直线运动移动了2个单位;从4到6时,圆周旋转了90度,直线运动移动了2个单位;从6到10时,圆周旋转了90度,直线运动移动了4个单位。 这样一个数列

509. 斐波那契数

别来无恙 提交于 2020-01-25 21:21:25
递归实现: class Solution { public int fib(int N) { //递归实现 if(N==0){ return 0; } if(N==1){ return 1; } return fib(N-1)+fib(N-2); return res; } } 迭代实现: 通过三个变量模拟递归累加的过程。 class Solution { public int fib(int N) { //迭代实现 int f1=1; int f0=0; int res=0; if(N==1){ return f1; } for(int i=2;i<=N;++i){ res=f1+f0; f0=f1; f1=res; } return res; } } 来源: CSDN 作者: 我就是个渴望成长的小菜鸡 链接: https://blog.csdn.net/junjunjiao0911/article/details/103923730

[LeetCode] 509. 斐波那契数

左心房为你撑大大i 提交于 2020-01-22 09:18:46
1 题目描述 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 给定 N,计算 F(N)。 示例 1: 输入:2 输出:1 解释:F(2) = F(1) + F(0) = 1 + 0 = 1. 示例 2: 输入:3 输出:2 解释:F(3) = F(2) + F(1) = 1 + 1 = 2. 示例 3: 输入:4 输出:3 解释:F(4) = F(3) + F(2) = 2 + 1 = 3. 提示: 0 ≤ N ≤ 30 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fibonacci-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2 解题思路 方法一 递归法 时间复杂度:O(2 N) —2 的n 次幂。这是计算斐波那契数最慢的方法。因为它需要指数的时间。 空间复杂度:O(N),在堆栈中我们需要与 N 成正比的空间大小。该堆栈跟踪 fib(N) 的函数调用,随着堆栈的不断增长如果没有足够的内存则会导致 StackOverflowError。 方法二 记忆化自底向上的方法

斐波那契F(n+1)*F(n-1) - F(n^2) =(-1)^n的证明

核能气质少年 提交于 2020-01-21 16:00:19
证法一: 令 A = 1 + 5 2 A=\frac{1+\sqrt{5}}{2} A = 2 1 + 5 ​ ​ , B = 1 − 5 2 B=\frac{1-\sqrt{5}}{2} B = 2 1 − 5 ​ ​ 由斐波那契数列的通项公式 F ( n ) = A n + B n 5 F(n)=\frac{A^n+B^n}{\sqrt{5}} F ( n ) = 5 ​ A n + B n ​ 可得 F ( n + 1 ) F ( n − 1 ) = 1 5 ( A n + 1 + B n + 1 ) ( A n − 1 + B n − 1 ) F(n+1)F(n-1)= \frac{1}{5}(A^{n+1}+B^{n+1})(A^{n-1}+B^{n-1}) F ( n + 1 ) F ( n − 1 ) = 5 1 ​ ( A n + 1 + B n + 1 ) ( A n − 1 + B n − 1 ) F ( n ) 2 = 1 5 ( A n + B n ) 2 F(n)^2=\frac{1}{5}(A^n+B^n)^2 F ( n ) 2 = 5 1 ​ ( A n + B n ) 2 证明: F ( n + 1 ) F ( n − 1 ) − F ( n ) 2 F(n+1)F(n-1)-F(n)^2 F ( n + 1 ) F ( n − 1 ) − F (

通过斐波那契 和list算法 看代码中的逻辑处理

柔情痞子 提交于 2020-01-21 02:56:36
Problem 最近也写了很多代码,但总感觉自己好像毫无长进,又学了很多。 How to go on it? I don’t know how to treat my the code had writen before and how to optimize it. Some of them is very terrible, especially the service works. It’s so lengthy and tedious, maybe I need to trim its format and make it more concise. 代码有自己的理解,怎么去理解代码?经常会想这个问题,而很简单的业务,却 代码实现是又臭又长,xxxxxx。 像理解数学一样理解代码。 写了这个大学写过的一段代码,感觉现在的理解和以前完全不一样。 ‘ 代码中注释很多,不描述 import java . util . ArrayList ; import java . util . LinkedHashSet ; import java . util . List ; /** * @Author liubh * @Email lbhbinhao@163.com */ public class Fibonacci { public static void main ( String

Python基础题练习之斐波那契数列

ぃ、小莉子 提交于 2020-01-19 19:45:31
斐波那契数列 程序分析: 题目:兔子问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?” 分析:分析:第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还没有繁殖能力,所以一共是三对,以此类推 1 1 2 3 5 8 13 … 程序示例: "" " 题目:斐波那契数列 版本: 1.0 作者:假书生@ 日期: 2020 年 1 月 19 日 "" " def Func ( n ) : #第一个月和第二个月都是 1 对 if n == 1 or n == 2 : return 1 else : # 从第三个月开始 返回上一个数加上上一个数 return Func ( n - 1 ) + Func ( n - 2 ) # func ( 5 ) + func ( 4 ) # func ( 4 ) + func ( 3 ) + func ( 3 ) + func ( 2 ) # func ( 3 ) + func ( 2 ) + func ( 2 ) + func ( 1 ) + func ( 2 ) + func ( 1 ) + 1 # func ( 2 ) + func ( 1 ) + 1 + 1 + 1 + 1 + 1