斐波那契数列

斐波那契数列

老子叫甜甜 提交于 2019-11-29 04:10:38
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 1. 递归法 1. 分析 斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 根据公式可以直接写出: public class Solution { public int Fibonacci(int n) { if(n<=1){ return n; } return Fibonacci(n-1) + Fibonacci(n-2); } } 3. 复杂度 时间复杂度:O(2^n) 空间复杂度:O(1) 2. 优化递归 1. 分析 递归会重复计算大量相同数据,我们用个数组把结果存起来8! 2. 代码 public class Solution { public int Fibonacci(int n) { int ans[] = new int[40]; ans[0] = 0; ans[1] = 1; for(int i=2;i<=n;i++){ ans[i] = ans[i-1] + ans[i-2]; } return ans[n]; } } 3. 复杂度: 时间复杂度:O(n) 空间复杂度:O(n) 3. 优化存储 1. 分析 其实我们可以发现每次就用到了最近的两个数,所以我们可以只存储最近的两个数

Notes of assignments in week 1

无人久伴 提交于 2019-11-29 00:33:20
Q1 本题要求编写程序,找出给定的 n个数中的最大值及其对应的最小下标(下标从0开始)。 输入格式: 输入在第一行中给出一个正整数 n( 1)。第二行输入 n个整数,用空格分开。 输出格式: 在一行中输出最大值及最大值的最小下标,中间用一个空格分开。 输入样例: 6 2 8 10 1 9 10 输出样例: 10 2 Notes: 1) Say that we declare a var "max" to store the max value of input on the second line. We CANNOT INIT the var with an initial value, say, 0, since the input on the second line may be positive int, 0 as well as negative int!!! If we init "max" with 0, and assume that all of the input are negative values, the output will be 0 rather than the max value in the negative input, since the init value of 'max' is 0, which is greater than

递归的理解

断了今生、忘了曾经 提交于 2019-11-28 19:44:01
递归算法概念是函数调用自己来实现的某种功能,按以下方法理解递归你会恍然大悟(如果你对递归有疑惑的话),并觉得递归是如此简单: 1.递归是高中数学中的数列那一章讲的内容。数列这章讲了一个概念叫递推公式:如果已知数列的第1项(或前几 项),且从第二项(或某一项)开始的任一An与它的前一项An-1(或前几项)间的关系可以用一个公式来表 示,那么这个公式就叫递推公式,递推公式是给出数列的一种方法。 2.例如斐波那契数列的递推公式就是:An=An-1+An-2(n>2,a1=1,a2=1) 3.那么现在如果想用递归的方式表示斐波那契数列即可定义函数f(n):当n>2时f(n)=f(n-1)+f(n-2);当n=1时f(n)=1,当n=2时f(n)=1; 即private static int fibonacciRe(int i) { if(i == 1 || i == 2) return 1; else if(i>2) return fibonacciRe(i-1)+fibonacciRe(i-2); else return 0; } 4.解释:其实说白了递归函数就是一个递推公式,只要递推公式往纸上一写,把项A替换成函数名字,把n替换成函的 参数即可,最后用if处理一下特殊参数值时的结果值就欧了。 5.总结:我们为什么有些人很难理解递归函数呢

关于斐波那契数列的诸多公式

对着背影说爱祢 提交于 2019-11-28 19:39:48
本篇是专门记录斐波那契数列性质的笔记。 在本篇文章中,我们约定 \(f_n\) 为斐波那契数列的第 \(n\) 项,并且 \(f_0=0\) 。 这些公式中,有些是证明的,有些未证明,并且是否补坑看心情。 (其实是太菜不会证 首先,利用事实 \(f_n=f_{n+2}-f_{n+1}\) 得到 \[\sum\limits_{k=1}^{n}{f_k}=\sum\limits_{k=1}^{n}{(f_{k+2}-f_{k+1})} \] 这是一个 叠进和 ,因此我们很容易得到 \[\sum\limits_{k = 1}^n {{f_k} = {f_{n + 2}} - {f_2} = {f_{n + 2}} - 1} \] \[f_{n+3}=2f_{n+2}-f_n=2f_{n+1}+f_n\] \[f_{2n}=f_n^2+2f_{n-1}f_n=f_{n+1}^2-f_{n-1}^2\] \[f_{2n+1}=f_{n+1}^2+f_{n}^2\] \[3f_n=f_{n-2}+f_{n+2}\] \[\sum\limits_{k = 1}^n {f_k^2 = {f_n}{f_{n + 1}}} \] \[f_{n+1}f_{n-1}-f_n^2=(-1)^n\] \[f_{m+n}=f_mf_{n+1}+f_nf_{m-1}\] \[\sum\limits_{k = 0}

[剑指offer]斐波那契数列

两盒软妹~` 提交于 2019-11-28 17:53:36
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 题目链接: https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=13&tqId=11160&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking package com.sunshine.OFFER66_SECOND; import org.junit.Test; public class A7_Fibonacci { @Test public void test() { System.out.println(Fibonacci(0)); } public int Fibonacci(int n) { if(0 == n){ return 0; } int a = 0; int b = 1; int ans = 1; n--; while (n > 0) { ans = a + b; a = b; b = ans; n--; } return ans; } } 来源: https://www.cnblogs.com/MoonBeautiful/p/11417706.html

【剑指Offer】斐波那契数列

妖精的绣舞 提交于 2019-11-28 14:01:27
题目:要求输入一个整数n,请你输出斐波那契数列的第n项 A1:教科书方法,递归,但是时间复杂度随着n的增大而递增 ====> 不实用 A2:可以把得到的数列中间项保存起来,避免重复计算 ====> 时间复杂度O(n) A3:数据公式(太高级了,不太懂) //O(n)方法,保存中间项 class Solution { public: int Fibonacci(int n) { int ret[] = {0,1}; if(n <= 1) { return ret[n]; } long long fib_1 = 0; long long fib_2 = 1; long long fib_n = 0; for(int i = 2; i <= n ;i++) { fib_n = fib_1 + fib_2; fib_1 = fib_2; fib_2 = fib_n; } return fib_n; } };    相关题目:   求和(输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来)   寻找第K大(有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。)   生成格雷码(在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数

斐波那契数列

半世苍凉 提交于 2019-11-28 12:32:01
//斐波那契数列:后一个数等于前面两个数的和 //0,1,1,2,3,5,8,13,21.... let readline = require("readline-sync"); console.log("请输入斐波那契数列的位数:") let pos = readline.question(""); let num1 = 0;//第1位 let num2 = 1;//第2位 let temp = 0;//临时变量 for(let i=3;i<=pos;i++) { temp = num2; num2 = num1 + num2; num1 = temp; } console.log("该位数上的斐波那契数为:",num2); 来源: https://www.cnblogs.com/dbda/p/11407304.html

剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)

六眼飞鱼酱① 提交于 2019-11-28 12:25:33
1. 题目描述   大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 2. 思路和方法   斐波那契数列(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*)。   在本题中,有一个条件是“ 从0开始,第0项为0 ”,从0开始,因此,F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。 3.C++代码 1 class Solution { 2 public: 3 int Fibonacci(int n) { 4 if (n <= 1) 5 return n; 6 int res = 0; 7 int n1 = 0; 8 int n2 = 1; 9 for (int i=2; i<=n; i++){ 10 res = (n1 + n2); 11 n1 = n2; 12 n2 = res; 13 } 14 return res; 15 } 16 }; View

numpy计算斐波那契数列

限于喜欢 提交于 2019-11-28 06:38:20
斐波那契数列的两种方法 Key_Function np.matrix函数, 创建矩阵 rint函数, 对浮点数取整, 但不改变浮点数类型 Code import numpy as np # 第一种方法 F = np.matrix([[1, 1], [1, 0]]) print(F) ''' [[1 1] [1 0]] ''' print((F ** 7)[0, 0]) # 21 print((F ** 2)) ''' [[2 1] [1 1]] ''' print((F ** 3)) ''' [[3 2] [2 1]] ''' print((F ** 4)) ''' [[5 3] [3 2]] ''' # 第二种方法 # 利用黄金分割公式(比奈公式), 加上取整函数, 计算斐波那契数列 n = np.arange(1, 9) print(n) # [1 2 3 4 5 6 7 8] sqrt5 = np.sqrt(5) # 取开方 print(sqrt5) # 2.2360679775 phi = (1 + sqrt5) / 2 # 计算黄金分割率 print(phi) # 1.61803398875 fibonacci = np.rint((phi**n - (-1/phi)**n)/sqrt5) # rint函数, 对浮点数取整, 但不改变浮点数类型 print

斐波那契数列递归的时间复杂度

眉间皱痕 提交于 2019-11-28 06:16:07
f(n)=f(n-1)+f(n-2) 二阶常系数差分方程,解得: 当n趋于无穷大,后面的加数趋于0,则约等于O(1.618^n),即如O(2^n)级别 其实可以树状展开看下,顶层是f(n),之后每层翻倍,则所有子节点的和约为2^n级别,但不会满二叉,所以比这小点。 来源: https://www.cnblogs.com/willaty/p/11396840.html