斐波那契数列

斐波那契数列(Java)

倾然丶 夕夏残阳落幕 提交于 2019-12-06 07:58:56
一、什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1,1,2,3,5,8,13,21,34,……1,1,2,3,5,8,13,21,34,……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n−1)+F(n−2)(n>=3,n∈N∗) 二、Java实现(输出前20项) 1.循环写法 package com.company; class Fibonacci{ public void output(int previous , int latter , int sum){ for(int i = 1 ; i <= 18 ; i ++){ sum = previous + latter; System.out.println("第"+(2+i)+"项是:"+sum); previous = latter; latter = sum; } } } public class Test { public static void main(String[] args) { int previous = 1; int latter = 1; int sum = 0;

斐波那契数列Fibonacci问题

戏子无情 提交于 2019-12-06 04:09:32
斐波那契数列定义 Fibonacci array:1,1,2,3,5,8,13,21,34,... 在数学上,斐波那契数列是以递归的方法来定义: F(0) = 0 F(1) = 1 F(n) = F(n-1) + F(n-2) 用文字描述,就是斐波那契数列由0和1开始,之后的斐波那契系数就是由之前的两数之和想加而得,首几个斐波那契数列系数是:0,1,1,2,3,5,8,13,21,34,55,...特别指出:0不是第一项,而是第零项。 递归解法 最容易想到的解法是按照公式的递归解法,具体实现如下: int fib(int n) { if (n < 2) return n; return fib(n-1) + fib(n-2); } 但其实该递归解法会重复两次计算 fib(n-2) 项,时间数量级远远超过 n,是指数级别的增长,时间复杂度很高,如下图所示,更因递归调用占用大量的堆栈空间,对程序而言是一场灾难。所以该种解法如果在面试中肯定是不能让面试官满意的。 顺序求和法 按照公式定义前开始的两项 a 和 b 为 0 和 1。后一项 c 是前两项之和,并且 a 和 b重新赋值,动态向右移动,时间复杂度为 O(n)。这种解法非常优秀! int fib(int n) { if (n < 2) return n; int a = 0; int b = 1; int c = 0; for

斐波那契数列(python)

孤街浪徒 提交于 2019-12-05 22:03:33
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 # -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here if n ==0: return 0 if n == 1: return 1 res=[0,1] for i in range(1,n): a = res[i-1] b = res[i] b+=a a=b-a res.append(b) return res[-1] 2019-11-28 09:30:07 来源: https://www.cnblogs.com/NPC-assange/p/11946961.html

python3,斐波那契数列小代码,展示生成器作用

痴心易碎 提交于 2019-12-05 20:05:41
下面的小代码是应用斐波那契数列小代码,展示生成器作用 def fib(n): before,after = 0,1 for i in range(n): yield before before,after = after,before + after g = fib(10) print(g) for i in range(10): print(next(g)) 运行结果如下: <generator object fib at 0x7f923958bf10> 0 1 1 2 3 5 8 13 21 34 来源: https://www.cnblogs.com/iceberg710815/p/11944406.html

斐波那契数列

て烟熏妆下的殇ゞ 提交于 2019-12-05 11:32:35
简单的说就是f[n]=f[n-1]+f[n-2],f[1]=1,f[2]=1的一个数列。 1.根据递推式可以简单得出一个递归求法。 typedef long long ll; ll f(ll x){ if(x==1||x==2)return 1; else return f(x-1)+f(x-2); } int main(){ ll n; scanf("%lld",&n); printf("%lld\n",f(n)); } 2.显然得出这样得一个递归式子出现了大量得重复计算,可以记忆化优化 typedef long long ll; const int maxn=50; ll f[maxn]; int main(){ ll n; f[1]=f[2]=1; scanf("%lld",&n); for(int i=3;i<=n;i++){ f[i]=f[i-1]+f[i-2]; } printf("%lld\n",f[n]); } 3.如果可以构造如图所示的矩阵,那么连续给矩阵乘以n个这样的矩阵就可以得到f n 。 又 因为矩阵满足结合律,所以可以用快速幂 的方式,除去矩阵乘法的时间复杂度,O(logn)就可以得到斐波那契数列的第n项。 对于常系数线性齐次递推得到如下结论: const int N=10,M=10; long long a[10]; long long f[10];

【剑指offer】01-斐波那契数列

﹥>﹥吖頭↗ 提交于 2019-12-05 11:24:21
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 斐波那契数列数学表达式:   f(0) = 0, n=0   f(1) = 1, n=1   f(n) = f(n-1) + f(n-2), n>1 1、第一次用的递归实现,但是在OJ系统里面运行会超时,效率太低 class Solution1: """递归,代码超时!""" def Fibonacci(self, n): if n <= 0: # n考虑小于0的情况! return 0 elif n == 1: return 1 else: return self.Fibonacci(n-1) + self.Fibonacci(n-2) 2、改用循环来做 class Solution2: """不用递归""" def Fibonacci(self, n): first = 0 second = 1 num = 0 if n <= 0: return 0 elif n == 1: return 1 else: for i in range(2, n+1): num = first + second first = second second = num return num 相当于用first和second游标分别指向前两个数,num就是前两个数的和

斐波那契数列--求自然数的和

馋奶兔 提交于 2019-12-05 00:16:14
斐波那契数列 /* 斐波那契数列是: 前两项一样, 第三项是前两项的和 1+1=2 第四项是前二项的和 1+2=3 第五项是前二项的和 3+2=5 1 1 2 3 5 8 13 21 34 55 .... */ 使用递归求斐波那契数列第N项的值 1 //使用递归求斐波那契数列第N项的值 2 package main 3 4 import "fmt" 5 6 func main() { 7 fmt.Println("通过斐波那契列数,测试电脑计算能力,数字不动了,请自行关闭窗口。") 8 for i := 0; i < 10000; i++ { 9 fmt.Printf("第 %v 位置,数为 %v \n", i, GetFibonacci(i)) 10 } 11 } 12 13 func GetFibonacci(n int) int { 14 15 //归回来 16 if n == 0 || n == 1 { 17 return 1 18 } 19 20 //一路递下去 21 return GetFibonacci(n-1) + GetFibonacci(n-2) 22 } 23 /* 24 通过斐波那契列数,测试电脑计算能力,数字不动了,请自行关闭窗口。 25 第 0 位置,数为 1 26 第 1 位置,数为 1 27 第 2 位置,数为 2 28 第 3 位置,数为 3 29

斐波那契数列递归实现

只谈情不闲聊 提交于 2019-12-04 15:53:21
1,fibinacc 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契系数就是由之前的两数相加而得出。 首几个斐波那契系数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的数列A000045) 2,fibnacci数列的递归表达式 F0=0 F1=1 Fn=Fn-1+Fn-2(n>=2) 3,实现代码(运行图于附件中) #裴波纳契数列 a=1 b=1 n = int(input("你想查找裴波纳契数列中的项的序数:")) n = n-2 while True: if n<=0: result = a break else : c=a+b a=b b=c n=n-1 if n==0: result = b break print(result) input('按任意键退出') 完全可以实现一分钟内完成,只要一秒不到 来源: https://www.cnblogs.com/GanNy/p/11872400.html

斐波那契数列

老子叫甜甜 提交于 2019-12-04 09:11:19
斐波那契数列 什么是斐波那契数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 斐波那契数列的递归表达式 F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) python实现斐波那契数列 def fbnq(n): a,b=1,1 if n==1 or n ==2: return 1 else: i=3 while i<=n: a,b=b,a+b i+=1 return b print(fbnq(int(input("输入一个数:")))) 来源: https://www.cnblogs.com/dongjiashuai/p/11851970.html

剑指Offer-7.斐波那契数列(C++/Java)

淺唱寂寞╮ 提交于 2019-12-04 09:07:19
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 分析: 斐波那契数列是0,1,1,2,3,5,8,13...也就是当前的数字是前两个数字之和。 题目很简单求出斐波那契数列第n项。 程序: C++ class Solution { public: int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) return 1; int fNum = 0; int sNum = 1; int temp = 0; for(int i = 2; i <= n; ++i){ temp = sNum; sNum = fNum + sNum; fNum = temp; } return sNum; } }; Java public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) return 1; int fNum = 0; int sNum = 1; int temp = 0; for(int i = 2; i <= n; ++i){ temp = sNum; sNum = fNum + sNum; fNum = temp; } return sNum; } }