斐波那契数列

Go斐波那契数列

北城余情 提交于 2020-01-23 00:20:39
package main import ( "fmt" ) func fbn(n int) ([]uint64) { //声明一个切片,切片大小 n fbnSlice := make([]uint64, n) //第一个数和第二个数的斐波那契 为1 fbnSlice[0] = 1 fbnSlice[1] = 1 //进行for循环来存放斐波那契的数列 for i := 2; i < n; i++ { fbnSlice[i] = fbnSlice[i - 1] + fbnSlice[i - 2] } return fbnSlice } func main() { /* 1)可以接收一个 n int 2)能够将斐波那契的数列放到切片中 3)提示, 斐波那契的数列形式: arr[0] = 1; arr[1] = 1; arr[2]=2; arr[3] = 3; arr[4]=5; arr[5]=8 思路 1. 声明一个函数 fbn(n int) ([]uint64) 2. 编程fbn(n int) 进行for循环来存放斐波那契的数列 0 =》 1 1 =》 1 */ //测试一把看看是否好用 fnbSlice := fbn(20) fmt.Println("fnbSlice=", fnbSlice) //fnbSlice= [1 1 2 3 5 8 13 21 34 55 89 144

核心算法基础一:动态规划

纵饮孤独 提交于 2020-01-22 19:42:37
文章目录 前言 动态规划入门须知 动态规划解决哪一类问题 那些问题适合用该算法思想去解决 动态规划的套路解决步骤 **1. 建立状态转移方程** **2. 缓存并复用以往结果** **3. 按顺序从小往大算** 例题一(easy入门) 1.简单递归(反例) 2. 动态规划 例题二(稍微困难--深入理解) 思路 具体代码 例题三:难度适中(笔试难度) 思路(回溯算法也可以,之后会有解释) 具体代码(个人,不代表标准) 算法总结(套路) 前言 接下来最为核心的知识点目前杨某人思路清晰的整理好了,首先为大家展示几个核心算法的理论思想,只有掌握了这种基础才能更好的做题通过笔试锻炼面试时技术的询问,接下来会给大家一些质量比较高的笔试试题,帮助大家更好的理解算法的思想,完成理论到实践、逻辑到技术的转变,最后会为大家整理一些大厂关注的一些算法试题的套路和应对的套路,不保证百分之百,但是会保证60%以上的思想,话不多说,开始啦~~ 额,多说一句:关于之前的项目和之后的一些比较重要的算法(整理了个人的最好的资源更容易学习和联系)都将会设置上一定的权限,望大家理解,不过粉丝可以一直免费观看 动态规划入门须知 本人掌握动态规划的过程,有点钻牛角尖,这里用我的心历路程给各位同学们做个提醒。当我刚看到动态规划这个响亮的大名时,瞬间陷入了沉思,脑中浮想联翩,揣摩着这个算法应该很带感。 看一些大众的百度的解释:

python 斐波那契数列实现方法

南楼画角 提交于 2020-01-16 20:04:42
# while def Fibonacci1(num): a,b=0,1 while a<num: print(a) a,b=b,a+b # print(Fibonacci1(20)) # yield def Fibonacci2(num): a,y,b=0,1,1 while a<num: yield y y,b=b,y+b a=a+1 res=Fibonacci2(10) fbn=[i for i in res] # print(fbn) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] for def Fibonacci3(n): a,b=0,1 for i in range(n): a,b=b,a+b print(a) # print(Fibonacci3(10)) # 上述的递归在时间复杂度上面,效率较慢,不推荐 # 矩阵法 时间复杂度O(log n) import numpy def fib_matr(n): return (numpy.matrix([[1, 1], [1, 0]]) ** (n - 1) * numpy.matrix([[1], [0]]))[0, 0] for i in range(20): print(int(fib_matr(i)), end=" ") # 0 1 1 2 3 5 8 13 21 34 55 89 144

菜鸟教程python100题:递归函数

一个人想着一个人 提交于 2020-01-15 04:02:46
题目:斐波那契数列。 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 在数学上,费波那契数列是以递归的方法来定义: F(n) = F(n-1) + F(n-2) 理解:递归函数与循环类似,最终所求任何结果都可以递归至初始值,也就是任何结果都能由初始值表示。 代码实现如下 def fib(n): if n == 1 or n ==2: return 1 return fib(n-1)+fib(n-2) 来源: CSDN 作者: 彩包包 链接: https://blog.csdn.net/weixin_44602690/article/details/103976608

剑指offer---斐波那契数列

╄→гoц情女王★ 提交于 2020-01-12 15:00:49
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这样的一个数列被称为斐波那契数列 即第n项为 F(n) = F(n - 1) + F(n - 2); 样例输入: 8 10 样例输出: 21 55 实现: 采用递归的方法。 我们可以观察到斐波那契数列中 n = 0、1时,它的数值刚好n相等 n = 2、3、4时,它的实质==数值刚好等于n-1 所以我们可以相对简化一下递归的过程,并且相对减少了递归的次数。 实现如下: class solution { public: int Fibonacci(int n) { if(n <= 1) { return n; } if(n <= 4) { return n-1; } else { return Fibonacci(n - 1) + Fibonacci(n - 2); } } }; 来源: CSDN 作者: 行知天下 链接: https://blog.csdn.net/qq_27248989/article/details/83385583

Java代码实现斐波那契数列

老子叫甜甜 提交于 2020-01-10 01:26:08
斐波那契数列 百度百科 代码演示 二种算法执行效率示例   运行结果可知, 算法不同,结果相同 ,代码运行效率具有天壤之别。 一个好的算法,可以让程序运行效率大幅度提升 ~ 代码拷贝区 package com.cyb; /** * 斐波那契数列:后一个数等于前两个数之和 0 1 1 2 3 5 8 13 21..... * @author chenyanbin * */ public class Main { /* * 递归方式 */ public static int fib1(int n) { if (n <= 1) return n; return fib1(n - 1) + fib1(n - 2); } /* * 优化后算法 */ public static int fib2(int n) { if (n <= 1) //第一个、第二个数,返回本身 return n; int first = 0; int second = 1; while (n-- > 1) { second += first; // 第三个数=第一个数+第二个数 first = second - first; } return second; } public static void main(String[] args) { Long begin = System.currentTimeMillis(

菲波那切数列案例演示(递归方法)

我是研究僧i 提交于 2020-01-06 01:18:58
/** * 功能:菲波那切数列案例演示(递归方法) * 详情:斐波那契数,亦称之为斐波那契数列(意大利语: * Successione di Fibonacci),又称黄金分割数列、费 * 波那西数列、费波拿契数、费氏数列,指的是这样一个 * 数列:0、1、1、2、3、5、8、13、21、……在数学上, * 斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, * Fn=F(n-1)+F(n-2)(n>=2,n∈N*),用文字来说,就是 * 斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数 * 就由之前的两数相加。 * * 作者:徐守威 */ package com.xushouwei; import java.io.*; import java.util.*; public class T1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入你要查看兔子数的月份:"); Scanner sc=new Scanner(System.in); int month=sc.nextInt(); System.out.println("第"+month+"月份的兔子数目为"

求斐波那契数列的前n个数

本秂侑毒 提交于 2020-01-04 09:34:49
在这里插入代码片 # include <stdio.h> int main ( void ) { int i , n , x1 , x2 , x3 ; scanf ( "%d" , & n ) ; x1 = 1 ; x2 = 1 ; if ( n == 1 ) { printf ( "%d " , x1 ) ; } if ( n == 2 ) { printf ( "%d %d " , x1 , x2 ) ; } else { printf ( "%d %d " , x1 , x2 ) ; for ( i = 1 ; i <= n ; i ++ ) { x3 = x2 + x1 ; printf ( "%d " , x3 ) ; x1 = x2 ; x2 = x3 ; } } return 0 ; } 来源: CSDN 作者: 一条河可以 链接: https://blog.csdn.net/weixin_45949073/article/details/103811901

【经典算法】动态规划

二次信任 提交于 2020-01-04 01:03:47
目录 斐波那契数列的启发 第一个例子 第二个例子 参考资料 斐波那契数列的启发 在讨论动态规划之前,我们先看一个熟悉的例子——斐波那契数列(Fibonacci sequence): 如果我想求 f ( 3 ) f(3) f ( 3 ) ,那我只要知道 f ( 1 ) f(1) f ( 1 ) 和 f ( 2 ) f(2) f ( 2 ) 就可以了,同理,如果想知道 f ( 4 ) f(4) f ( 4 ) ,那我需要知道 f ( 2 ) f(2) f ( 2 ) 和 f ( 3 ) f(3) f ( 3 ) 。以此类推,如果我想知道 f ( n ) f(n) f ( n ) ,那么只要已知 f ( 1 ) . . . f ( n − 1 ) f(1)...f(n-1) f ( 1 ) . . . f ( n − 1 ) 即可。对于像具有像斐波那契数列这样递推关系的问题,都可以用这种方法求解。虽然这样看上去有点笨,却是一个用空间换时间的高效方法,因为这样时间复杂度就能降到 O ( n ) O(n) O ( n ) ,而用递归的方法时间复杂度可能达到 O ( 2 n ) O(2^n) O ( 2 n ) 。下面我们看一个例子: 第一个例子 对于数组 [ a 1 a 2 . . . a n ] [a_1\ a_2 \ ... \ a_n] [ a 1 ​ a 2 ​ . . . a n

青蛙跳台阶(斐波那契数列)

泪湿孤枕 提交于 2019-12-30 19:02:16
题目描述 题目一 :一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 变态跳台阶: 题目二 :一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 实现思路 题目一 :刚接触到这个题目是没有头绪的,观察了一段时间后发现,青蛙的跳法恰好符合Fibonacci sequence( 斐波那契数列 ),于是便有了解决思路。 n 个台阶的跳法 f(n)=f(n-1)+f(n-2) 。 题目二 :每个台阶可以看作一块木板,让青蛙跳上去,n个台阶就有n块木板,最后一块木板是青蛙到达的位子, 必须存在。其他 n-1 块木板可以任意选择是否存在,则每个木板有存在和不存在两种选择, n-1 块木板 就有 2^(n-1) 种跳法,可以直接得到结果。 编程实现 public class Solution { //基础跳台阶,题目一 public int JumpFloorBase ( int target ) { if ( target <= 0 ) { return 0 ; } if ( target == 1 ) { return 1 ; } if ( target == 2 ) { return 2 ; } int first = 1 , second = 2 ,