斐波那契数列

剑指offer斐波那契数列python

爱⌒轻易说出口 提交于 2019-12-03 06:43:05
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路 斐波那契数列,即第n项为第n-1项和n-2项的和,可用递归,但复杂度高。直接用一个数组保存之前的项即可。 代码 1 # -*- coding:utf-8 -*- 2 class Solution: 3 def Fibonacci(self, n): 4 ans = [0,1,1,2] 5 while n > len(ans) - 1: 6 ans.append(ans[-1]+ans[-2]) 7 return ans[n] 来源: https://www.cnblogs.com/wangzhihang/p/11781077.html

斐波那契数列(递归)c#

徘徊边缘 提交于 2019-12-03 02:44:14
我郑重宣布 我爱递归 我自己编程几乎都没用过递归 我看到这个题的时候虽然想到了用递归 但是我个脑残一直在想怎么设置动态数组 明明纯递归更简单 我也是可无语 反正我爱上递归了 爱惹 无法自拔 来源: https://www.cnblogs.com/ywfp-lee/p/11774462.html

斐波那契数列(递归、非递归算法)

匿名 (未验证) 提交于 2019-12-03 00:39:02
题目 斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。 限制 时间限制:1秒 空间限制:32768K package com . algorithm ; import java . util . Scanner ; /** * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 * @日期:2018年6月30日 下午10:11:43 * @作者:Chendb */ public class Fibonacci { public static void main ( String [] args ) { Scanner scanner = new Scanner ( System . in ); int n = scanner . nextInt (); System . out . println ( fibonacciRecursion ( n )); System . out

递归、迭代求斐波那契数列

匿名 (未验证) 提交于 2019-12-03 00:29:01
今天给大家分享一下基本算,就是使用递归、迭代求斐波那契数列,同时给解释迭代算法求解波那契数列的算法的时间复杂性和空间复杂性和分析递归算法求解波那契数列的算法的时间复杂性和空间复杂性。 对于迭代,确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式或关系。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。而且要对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。下面就是迭代算法: #include<stdio.h> #define N 80 long fun( int);//函数调用 int main()//主函数 { int n;//定义 scanf("%d",&n);//输入 printf("the value is %ld\n",fun(n)); return 1; } long fun(int n) { long i; long Fib[N]; //定一个数组 Fib[0]=0;Fib[1]=1; //迭代算法控制 for(i=2;i<=n;i++) Fib[i]=Fib[i-1] + Fib[i-2]; return Fib[n]; } 结果:

利用数组计算斐波那契数列

匿名 (未验证) 提交于 2019-12-03 00:15:02
本题要求编写程序,利用数组计算菲波那契(Fibonacci)数列的前 N项,每行输出5个,题目保证计算结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如::1,1,2,3,5,8,13,...。 输入格式: 输入在一行中给出一个整数 N( 1)。 输出格式: 输出前 N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。 如果输入的 N不在有效范围内,则输出"Invalid."。 输入样例1: 7 输出样例1: 1 1 2 3 5 8 13 输入样例2: 0 输出样例2: Invalid. 1 #include<stdio.h> 2 int main() 3 { 4 int i, n; 5 int a[50] = { 1,1 }; 6 scanf("%d", &n); 7 if (n >= 1 && n <= 46) 8 { 9 for (i = 2; i < n; i++) 10 a[i] = a[i - 1] + a[i - 2];//先遍历一遍46个斐波那契数到数组 11 for (i = 0; i < n; i++) 12 { 13 printf("%11d", a[i]); 14 if ((i + 1) % 5 == 0)//i从0开始 所以加一除以5 15

斐波那契数列[C++版]

匿名 (未验证) 提交于 2019-12-03 00:05:01
斐波那契数列[C++版] 问题描述 解决思路及代码 问题描述 大家都知道斐波那契数列。就是1 1 2 3 5 8 13… … 后一个数为前两个数的和。 现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 其中n<=39 解决思路及代码 这个题很简单,考递归,但是我在牛客网上测试迟迟不通过。 于是我换了另外一种非递归的方法,上一下我的代码。 #include < iostream > using namespace std ; int Fibonacci ( int n ) { if ( n <= 1 ) { return n ; } int a [ n + 1 ] ; a [ 0 ] = 0 ; a [ 1 ] = 1 ; for ( int i = 2 ; i <= n ; i ++ ) { a [ i ] = a [ i - 1 ] + a [ i - 2 ] ; } return a [ n ] ; } int main ( ) { int n = 5 ; cout << Fibonacci ( n ) << endl ; return 0 ; } 遗憾的是,这样的代码也是无法通过的。 我也不知道为何。又换了一种代码,成功了。 #include < iostream > using namespace std ; int Fibonacci (

数组:斐波那契数列

匿名 (未验证) 提交于 2019-12-03 00:03:02
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路分析 公式: f(n) = n, n <= 1 f(n) = f(n-1) + f(n-2), n > 1 参考代码 1 public class Solution { 2 public int Fibonacci ( int n ) { 3 if ( n == 0 || n == 1 ) { 4 return n ; 5 } 6 int fn1 = 0 ; 7 int fn2 = 1 ; 8 for ( int i = 2 ; i <= n ; i ++) { 9 fn2 = fn1 + fn2 ; 10 fn1 = fn2 - fn1 ; 11 } 12 return fn2 ; 13 } 14 } 来源:博客园 作者: 西红市菜鸡 链接:https://www.cnblogs.com/carry6/p/11517080.html

斐波那契数列 面试算法(三)

微笑、不失礼 提交于 2019-12-02 23:58:28
import java.math.BigDecimal; import java.util.Scanner; import java.util.function.BinaryOperator; public class Fbnq { /** * 假设n为正整数,斐波那契数列定义为: * f(n) = 1, n < 3; * f(n) = f(n-1) + f(n-2), n>=3 * * 现在请你来计算f(n)的值,但是不需要给出精确值,只要结果的后六位即可。 * * 输入:一行,包含一个正整数n,且0<n<1000 * 输出:一行,f(n)的后6位(十进制,不足6位不补零) * @param args */ public static void main(String[] args) { Scanner s = new Scanner(System.in); int i = s.nextInt(); BigDecimal f2 = fb(i); String v = String.valueOf(f2); if (v.length() > 6) { String substring = v.substring(v.length() - 6); System.out.println(substring); }else { System.out.println(v); } }

数据结构与算法之递归和循环

匿名 (未验证) 提交于 2019-12-02 23:57:01
递归:代码简洁,但是效率低(每次函数调用都有时间和空间的开销); 循环:和递归相反; 1 斐波那契数列 题目:写入一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义:f(n) = f(n-1) + f(n-2),初始值f(0)=0且f(1)=1; 解题思路: (1)递归:根据f(n)的定义来递归计算; (2)循环:定义三个长整数one、Two和Res,迭代计算; 未完待续~ 来源:博客园 作者: 博1990 链接:https://www.cnblogs.com/bo1990/p/11449220.html

实现斐波那契数列的另一种方法

匿名 (未验证) 提交于 2019-12-02 23:48:02
斐波那契数列最常见的表示方式就是递归表示: 我们在编程实现时也常用递归、迭代等方法,如果可以用一个等式来表示任意斐波那契数,会是怎么样的呢?上网时看到了AN INTEGER FORMULA FOR FIBONACCI NUMBERS这篇文章,觉得挺有意思的,整理记录一下。 常见实现方法 递归 def fib_recursive(n): if n < 2: return 1 return fib_recursive(n-1)+fib_recursive(n-2) 1 2 3 迭代 def fib_iterative(n): a, b = 1, 1 for x in range(n): a, b = a + b, a return b 1 2 3 4 5 矩阵幂 def fib_matrix(n): m = numpy.matrix('1 1 ; 1 0') ** n return m.item(0) 1 2 3 这个方法可以算是从迭代法衍生而来,所求的就是矩阵m的m11m11。 (an+1bn+1)=(an+bnan)=(1110)(anbn)=(1110)n+1(11) (an+1bn+1)=(an+bnan)=(1110)(anbn)=(1110)n+1(11) 通项公式 def fib_phi(n): phi = (1 + math.sqrt(5)) / 2.0 psi =