斐波那契数列

斐波那契数列打印—循环练习7

家住魔仙堡 提交于 2020-02-07 04:06:37
#include #include <windows.h> using namespace std; int main(void) { int p; //共几位数列 int a=1; //数列前一位 int b=1; //数列后一位 int column; //斐波那契数 cout << "请输入几位斐波那契数列:"; cin >> p; if(p <= 0) { cout << "输入错误!!!" << endl; system("pause"); return 1; } if(p == 1) { cout << "1" << endl; system("pause"); return 0; } if(p == 2) { cout << "1 1" << endl; system("pause"); return 0; } cout << " 1 1 "; for(int i=3; i<=p; ++i) { column = a+b; a = b; b = column; cout << column << " "; } cout << endl; system("pause"); return 0; } /** 循环练习第7关 输出指定项的斐波那契数列. 1, 1, 2, 3, 5, 8, 13, 21, … **/ 1. a b 1 + 1 = f //f = 2 a = b

多分支递归——斐波那契数列

ε祈祈猫儿з 提交于 2020-02-07 03:02:27
2020.2.6 11:00 斐波那契数列:每一项都等于相邻的前两项之和。 (1 1 2 3 5 8 13…) 这个问题跟兔子问题很相似,并且,该数列也被称为黄金分割数列(高位项的相邻两项之比近似为0.618)。 思路:再求的时候,在求第n项的时候将它分解为前两项 之和,即f(n)=f(n-1)+f(n+2)。这个和之前学的阶乘题目 有些不一样,阶乘直接分成了直接量+小规模问题,而这个分成了 多个小规模问题。但是,思路是一样的。 所以,在分解的时候,可以有两种思路: ①:直接量+多个小规模问题 ②:直接分成多个小规模问题 代码实现: //5.斐波那契数列 static int f4 ( int i ) { if ( i == 1 || i == 2 ) { return 1 ; } return f4 ( i - 1 ) + f4 ( i - 2 ) ; } 草稿: 收工 来源: CSDN 作者: rm—rf 链接: https://blog.csdn.net/qq_40645674/article/details/104193158

矩阵快速幂---斐波那契数列

家住魔仙堡 提交于 2020-02-05 22:21:53
矩阵快速幂就是将快速幂和矩阵乘法结合起来,快速幂我之前的博客里,矩阵乘法就是将矩阵快速幂和快速幂结合, 代码 # include <bits/stdc++.h> using namespace std ; struct node { int mat [ 15 ] [ 15 ] ; //定义矩阵 } x , y ; node mul ( node x , node y ) { //矩阵乘法 node tmp ; for ( int i = 0 ; i < 10 ; i ++ ) { for ( int j = 0 ; j < 10 ; j ++ ) { tmp . mat [ i ] [ j ] = 0 ; for ( int k = 0 ; k < 10 ; k ++ ) { tmp . mat [ i ] [ j ] + = ( x . mat [ i ] [ k ] * y . mat [ k ] [ j ] ) % 10000007 ; } tmp . mat [ i ] [ j ] = tmp . mat [ i ] [ j ] % 10000007 ; } } return tmp ; } node matpow ( node x , node y , int num ) { //矩阵快速幂 while ( num ) { if ( num & 1 ) { y = mul

递归和斐波那契数列

非 Y 不嫁゛ 提交于 2020-02-04 23:56:48
递归 递归概念图 斐波那契数列 斐波那契数列为1、1、2、3、5、8、13、21、34……此数列从第3项开始,每一项都等于前两项之和,递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1。 Java实现斐波那契数列 package com . xingyun . digui ; /* * 递归思想,自己调用自己,不过需要控制好条件,满足条件才可以继续调用,否则无限调用会导致栈溢出 * */ public class DiGui { /* * 斐波那契数列 * 斐波那契数列为1、1、2、3、5、8、13、21、34…… * 此数列从第3项开始,每一项都等于前两项之和, * 递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1。 * * */ public static void main ( String [ ] args ) { System . out . println ( feibonaqi ( 10 ) ) ; } //递归实现斐波那契数列 public static int feibonaqi ( int i ) { if ( i == 1 || i == 2 ) { return 1 ; } else { return feibonaqi ( i - 2 ) + feibonaqi ( i - 1 ) ; }

C++求斐波那契数列思路

自闭症网瘾萝莉.ら 提交于 2020-02-04 18:22:46
首先看斐波那契数列是什么样子的一串数字 1 1 2 3 5 8 13… 如上所示,题目要求求第K个斐波那契数列的值是多少 这样假设我们要求的值为m,则 第一个 m=1 第二个 m=1 第三个 m=1+1=2 第四个 m=1+2=3 第五个 m=2+3=5 … 观察上边列出的等式有没有发现什么规律? 假设m后边的加数和被加数定义为a和b,即m=a+b有没有发现,在第四次第五次开始,下一次的a等于上一次的b,下一次的b等于上一次的m?这样便可以循环进行加和了。 我们使用for循环求m的值,求完之后保存本次的b和m到下一次计算当中,这样循环赋值加和,问题即解决了。 当然不要忘了前两个斐波那契数列的值都为1,可以通过条件判断直接打印出来。具体代码如下。 本题代码精妙之处就是循环赋值求和。 int main() { int a=1,b=1,m=0,k=0; scanf("%d",&k); if(k==1||k==2) { printf("1"); } else { for(int i=3;i<=k;++i) { m=a+b; a=b; b=m; } printf("%d",m); } return 0; } 来源: CSDN 作者: 八十万禁军教头哥 链接: https://blog.csdn.net/weixin_42212753/article/details/104170930

Leetcode笔记(python)

我与影子孤独终老i 提交于 2020-02-04 18:13:25
1.x的平方根 (1)作弊 return int(x**0.5)# **代表平方 (2)二分法 if x<=1: return x a=0 b=x while b-a>1: m=(b+a)//2 if x/m<m: b=m else: a=m return a 2.爬楼梯 (1)斐波那契数列 在数学上,斐波那契数列以如下 递推 的方法定义: F (1)=1, F (2)=1, F (n)= F (n - 1)+ F (n - 2)( n ≥ 3, n ∈ N*),即该数列从第三项起,每一项都等于前两项的和。 if n<=2: return n a=1 b=2 c=0 for i in range(2,n): c=a+b #从第三项起,每一项都等于前两项的和 a=b b=c return c 来源: CSDN 作者: 菜鸡小王cc 链接: https://blog.csdn.net/roxtigers/article/details/104170555

【剑指offer】斐波那契数列

落爺英雄遲暮 提交于 2020-02-04 13:14:33
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 下面首先会简单介绍递归算法,然后给出递归算法的解法代码,以及使用非递归算法的解决代码,最后是简单使用动态规划的方法解决。 递归算法 斐波那契数列是典型的递归代表。递归算法的核心在于两点: 结束递归的边界条件 递归公式 递归公式简单理解起来,就是类似于我们高中数学里可以用式子表达的数列,类似于初中学的找前后的规律,只是把这个规律公式化了。 递归算法的两个核心要点,对应到代码算法的实现,也就是以下 3 步: 找整个递归的终止条件:递归应该在什么时候结束? 找返回值:应该给上一级返回什么信息? 本级递归应该做什么:这一级递归中,要完成什么任务? 举个例子:假设有个数列 1 3 5 7 9 11 … 找到第n项的值。在这个数列中,开始的一项是 1,是无规律可循的一项,这一项到数列的尽头了,是 “结束” 项;此后,每一项都是在其前一项的基础上加 2,得到的。因此可以写为: 边界条件:f(1) = 1 递归公式:f(n) = f(n-1)+2 找到上述的两个要点,就可以实现递归算法。 解题思路 这一道题中,要求返回斐波那契数列的第 n 项,从 0 开始。 斐波那契数列:0 1 1 2 3 5 8 13 … 可以知道其边界条件和递归公式分别为: fibonacci(1) =

7.斐波那契数列

若如初见. 提交于 2020-02-03 21:25:27
题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路 这个题比较容易,多练了几个。 F ( n ) = F ( n − 1 ) + F ( n − 2 ) , n > = 2 F(n) = F(n-1)+F(n-2), n >=2 F ( n ) = F ( n − 1 ) + F ( n − 2 ) , n > = 2 F ( 1 ) = 1 , F ( 0 ) = 0 F(1) = 1, F(0) = 0 F ( 1 ) = 1 , F ( 0 ) = 0 递归(超时,重复计算太多) class Solution { public : int Fibonacci ( int n ) { if ( n == 0 || n == 1 ) return 1 ; int res = 0 ; res + = Fibonacci ( n - 1 ) + Fibonacci ( n - 2 ) ; return res ; } } ; 递归记忆化搜索 用个memo数组保存一下计算过的值。因为递归实际上就是利用栈,当递归到n=0 或 1时才会返回,此时 f ( 2 ) = f ( 1 ) + f ( 0 ) f(2)=f(1)+f(0) f ( 2 ) = f ( 1 ) + f ( 0 ) ,在返回f(2

剑指offer | 斐波那契数列

隐身守侯 提交于 2020-02-03 06:55:33
斐波那契数列 描述 输入一个整数n,输出斐波那契数列的第n项(从0开始,第0项为0)。 代码 - 非递归 (Java) public class Solution { public int Fibonacci ( int n ) { int [ ] f = new int [ n + 1 ] ; if ( n >= 0 ) f [ 0 ] = 0 ; if ( n >= 1 ) f [ 1 ] = 1 ; for ( int i = 2 ; i <= n ; ++ i ) { f [ i ] = f [ i - 1 ] + f [ i - 2 ] ; } return f [ n ] ; } } 来源: CSDN 作者: KarmenChan 链接: https://blog.csdn.net/Karmen199x/article/details/104149061

动态规划求解斐波拉契数列

。_饼干妹妹 提交于 2020-02-03 04:04:10
求解斐波拉契数列方法的改进 斐波拉契数列的求解相信大家都不陌生,最简单的方法就是简单递归,但事件复杂度为2的n次方。今天我将用动态规划的方法,将事件复杂度降到n,空间复杂度降到1 原始方法:简单递归,代码如下 # include <iostream> # include <string.h> # include <stdio.h> # include <stdlib.h> # define maxnum 30 using namespace std ; int fibonacci ( int n ) { if ( n == 0 || n == 1 ) return 1 ; else return fibonacci ( n - 1 ) + fibonacci ( n - 2 ) ; } int main ( ) { int n , res ; cout << "请输入斐波那契梳理数列的n:" << endl ; cin >> n ; res = fibonacci ( n ) ; cout << "结果:" << res ; return 0 ; } 改进方法:动态规划,代码如下(所谓的动态规划,简单理解就是用一张表记录原问题分解成的子问题的解的结果,如用简单递归解斐波那契数列时,计算f(5)时,利用f(5)= f(4)+f(3),但计算 f(4)时又会用到 f(3),若能在计算