斐波那契数列

python——斐波那契数列

徘徊边缘 提交于 2019-12-04 08:57:25
例:输出斐波那契数列的前10位 def fibs(num): result = [0, 1] for i in range(num-2): result.append(result[-2] + result[-1]) return result print(fibs(10))  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 人生苦短,快用python! 来源: https://www.cnblogs.com/pcyu/p/11851383.html

斐波那契数列Java实现[剑指offer]

北战南征 提交于 2019-12-04 06:53:38
题目 描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 题解 1.递归实现 采用递归的方式进行实现时,从第n个节点向下递归时,存在重复节点,当n越大时,递归越慢,往往会超出题目要求的时间限制 2.非递归实现 描述 为避免重复计算,采用自上而下的方式进行计算 code public class Solution { public int Fibonacci(int n) { int first=0; int second=1; int res=0; int[] result={0,1}; if(n<2){ return result[n]; } for(int i=1;i<n;i++){ res=first+second; first=second; second=res; } return res; } } 来源: https://www.cnblogs.com/ERFishing/p/11844629.html

fibnacci数列递归实现

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-04 05:53:38
一.斐波那契数列 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契系数就是由之前的两数相加而得出。 首几个斐波那契系数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的数列A000045) 二.斐波那契数列的递推表达式 F0=0 F1=1 Fn=Fn-1+Fn-2(n>=2) 三.python实现斐波那契数列 事实证明 当项数等于1000时所耗时间已超过了一分钟,更不用说10000了 来源: https://www.cnblogs.com/Werido-/p/11834055.html

斐波那契数列

浪子不回头ぞ 提交于 2019-12-04 05:42:36
斐波那契数列定义 若一个数列,前两项等于1,而从第三项起,每一项是其前两项之和,则称该数列为斐波那契数列。且这个数列中的数,如1,2,3,5,8,13,21,34,55等都被称为斐波那契数。 斐波那契数列递归公式 F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 经测试发现 无法在一分钟内写出fib(100),fib(1000),fib(10000)! 可写出fib(10)= 55 py.代码如下 def fib(n): if n == 1 or n == 2: return 1 return fib(n - 1) + fib(n - 2) i = input("请输入一个整数:") i = int(i) print(fib(i)) 来源: https://www.cnblogs.com/lhpshuaibi/p/11833718.html

斐波那契数列

筅森魡賤 提交于 2019-12-03 20:55:30
斐波那契数列(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*)详情见 百度百科 1 package hjx.java.week.two; 2 3 import java.util.Scanner; 4 5 /** 6 * @author hjx 7 * @datetime 2019年11月6日 下午8:30:29 8 */ 9 public class TestFibonacci { 10 public static void main(String[] args) { 11 /* 12 * 0、1、1、2、3、5、8、13、21、34、55、89…… 13 */ 14 Scanner scanner = new Scanner(System.in); 15 16 System.out.print("请输入您所需要的Fibonacci的项数:"); 17 int num = scanner.nextInt(); 18 19 System.out

POJ3070 斐波那契数列递推 矩阵快速幂模板题

☆樱花仙子☆ 提交于 2019-12-03 18:02:42
题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 5 const int mod = 10000; 6 struct mat{ 7 int m[2][2]; 8 }; 9 10 mat operator * (mat a, mat b){ //重载乘号,同时将数据mod10000 11 mat ret; 12 for(int i = 0; i < 2; i++){ 13 for(int j = 0; j < 2; j++){ 14 long long temp = 0; 15 for(int k = 0; k < 2; k++){ 16 temp += a.m[i][k] * b.m[k][j]; 17 temp %= mod; 18 } 19 ret.m[i][j] = temp; 20 } 21 } 22 return ret; 23 } 24 25 mat pow_mat(mat a, int n){ //矩阵快速幂和快速幂相同(广义快速幂的思想) 26 mat res = a; 27 while(n){ 28 if(n

PAT_B_PRAC_1003养兔子

霸气de小男生 提交于 2019-12-03 17:05:21
题目描述 一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。 输入描述: 测试数据包括多组,每组一行,为整数n(1≤n≤90)。 输出描述: 对应输出第n天有几只兔子(假设没有兔子死亡现象)。 输入例子: 12 输出例子: 12PAT里面好多斐波那契数列题。。。。变着花样考。这道题就是斐波那契数列,一开始看还不是很明白,按照题意列出来发现原来是斐波那契数列。。。。。 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); long[] arr = new long[91]; arr[1] = 1; arr[2] = 2; for(int i = 3;i < arr.length;i++){ arr[i] = arr[i-1] + arr[i-2]; } System.out.println(arr[n]); } } 来源: https://www.cnblogs.com/xiaolan-/p/11803997.html

10、斐波那契数列

微笑、不失礼 提交于 2019-12-03 14:55:06
要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 解法一:递归解法,但递归解法有很严重的效率问题,因为递归解法中重复的计算太多。 解法二:循环实现,避免重复计算,把已经得到的数列中间项保存起来。 public class Solution { public int Fibonacci(int n) { if(n <= 0) return 0; if(n == 1) return 1; int a = 0, b = 1, sum = 0; for(int i = 2; i< n; i++){ sum = a + b; a = b; b = sum; } return a + b; } } 斐波那契数列的应用 青蛙跳台阶问题 一只青蛙一次可以跳上一阶台阶,也可以跳上二阶台阶,求该青蛙跳上一个N阶的台阶总共有多少种跳法。 扩展: 一只青蛙一次可以跳上一阶台阶,也可以跳上两阶......也可以跳上N阶,此刻该青蛙跳上一个N阶的台阶共有多少种跳法? 来源: https://www.cnblogs.com/Aug-20/p/11801158.html

线段树+矩阵快速幂 codeforces718C Sasha and Array

放肆的年华 提交于 2019-12-03 13:22:54
传送门: 点击打开链接 题意:操作1,区间[l,r]的数字+x 操作2,求sigma f(i),l<=i<=r,f是斐波那契数列。 答案取模1e9+7 首先斐波那契数列用矩阵快速幂求,谁都会的。 这里有一个矩阵乘法的性质,A*B+A*C=A*(B+C) 有了这个性质,这题就非常傻逼了。 在求斐波那契数列中,是A*F,A是变换矩阵,F是列矩阵 那么我们用线段树的懒惰标记维护A矩阵,然后用sum维护F矩阵 之后在线段树上,就变成了区间更新乘以x。 就是一个很简单的手速题了。 #include <map> #include <set> #include <cmath> #include <ctime> #include <stack> #include <queue> #include <cstdio> #include <cctype> #include <bitset> #include <string> #include <vector> #include <cstring> #include <iostream> #include <algorithm> #include <functional> #define fuck(x) cout<<"["<<x<<"]"; #define FIN freopen("input.txt","r",stdin); #define FOUT

尾递归实现斐波那契数列

一笑奈何 提交于 2019-12-03 10:04:17
一、斐波那契数列 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368...... 二、递归算法 1. 代码 public int fib(int n){ if(n==1 || n==2){ return 1; } return fib(n-1)+fib(n-2); } 2. 缺点:多次计算重复的fib(n),性能低,一般只用于说明递归算法 三、改进:空间换时间,把计算出来的fib(n)存储起来,不用重复计算,空间复杂度O(n) public int fib(int n){ int[] array=new int[n]; array[0]=1; array[1]=1; for(int i=2;i<n;i++){ array[i]=array[i-1]+array[i-2]; } return array[n-1]; } 四、再次改进,空间减少到O(1),只存储3个数:前两个数和前两个数相加计算出来的结果 public int fib(int n){ int first=1; int second=2; int third=3; for(int i=3;i<=n;i++){ third=first