斐波那契数列

利用生成函数求斐波那契数列通项公式

ぃ、小莉子 提交于 2020-04-08 04:55:12
利用生成函数求斐波那契数列通项公式 先吐槽一下,学习这玩意儿的时候真的是深深的明白了自己的弱小,人家的一个"解得"我居然解了两个小时。。qwq 前置知识 斐波那契数列: \[f_i = f_{i-1} + f_{i - 2} \] \[f_0 = f_1 = 1 \] 普通生成函数: 简单来说用多项式 \(\sum_{i=0}^{\infty} a_ix^i\) 的系数表示序列的元素 同时因为我们不关心 \(x\) 的取值,因此 \(\sum_{i=0}^{\infty}a_ix^i\) 又称作以 \(x\) 为自由元的形式幂级数 常见的有: \(\frac{1}{1-x} = 1 + x + x^2 + x^3 + \dots + x^{\infty}\) 证明: 后半部分可以直接由通项公式得到 \(S_n = \frac{1-x^{n+1}}{1-x}\) ,当 \(x \in (-1, 1)\) ,那么 \(\lim_{n\to +\infty} x^{n+1} = 0\) 将 \(x\) 替换为 \(xk\) 得 \(\frac{1}{1-kx} = 1 + kx + k^2x^2 + k^3x^3 \dots + k^{\infty}x^{\infty}\) 解法 设 \(A = 1 + 1x + 2x^2 + 3x^3 + 5x^4 + 8x^5 \dots\)

『题解』Codeforces446C DZY Loves Fibonacci Numbers

让人想犯罪 __ 提交于 2020-04-06 11:31:20
更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description In mathematical terms, the sequence \(F_n\) of Fibonacci numbers is defined by the recurrence relation \[F_1 = 1; F_2 = 1; F_n = F_n - 1 + F_n - 2 (n > 2) \] DZY loves Fibonacci numbers very much. Today DZY gives you an array consisting of \(n\) integers: \(a1, a2, \cdots , an\) . Moreover, there are \(m\) queries, each query has one of the two types: Format of the query " 1 l r ". In reply to the query, you need to add \(F_i - l + 1\) to each element ai, where \(l \le i \le r\) . Format of the query " 2 l r ". In reply to the query

python下几个简单实例代码

寵の児 提交于 2020-03-23 18:28:46
注意:我用的python2.7,大家如果用Python3.0以上的版本,请记得在print()函数哦!如果因为版本问题评论的,不做回复哦!!! 1.题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码: ​ - - coding: UTF-8 - - for i in range(1,5): for j in range(1,5): for k in range(1,5): if (i != j) and (i != k) and (j != k): print i,j,k 1 2 3 4 5 6 2.题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 方法一:

实例006:斐波那契数列

随声附和 提交于 2020-03-18 18:00:44
100个不同类型的python语言趣味编程题 实例006:斐波那契数列 题目 斐波那契数列。 程序分析 斐波那契数列(Fibonacci sequence),从1,1开始,后面每一项等于前面两项之和。图方便就递归实现,图性能就用循环。(与我的博客文章兔子产自问题类似) # 递归实现 def Fib(n): return 1 if n<=2 else Fib(n-1)+Fib(n-2) print(Fib(int(input()))) # 朴素实现 target=int(input()) a,b=1,1 for i in range(target-1): a,b=b,a+b print(a) #解本问题有多种方法,此方法并不是标准答案,读者可以自己尝试各种方法。 如果你喜欢我的文章,请滑到下方点个推荐再走. ,以给我动力哦;转载请注名出处。然后..请多来做客鸭。 来源: https://www.cnblogs.com/wby-110/p/12518690.html

面试题10- I. 斐波那契数列

非 Y 不嫁゛ 提交于 2020-03-16 21:55:15
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:1 示例 2: 输入:n = 5 输出:5 提示: 0 <= n <= 100 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof class Solution: def fib(self, n: int) -> int: a, b = 0, 1 while n: t = a + b a = b b = t n -= 1 return a%1000000007 来源: CSDN 作者: weixin_42348049 链接: https://blog.csdn.net/weixin_42348049/article/details/104828515

Leetcode 斐波那契数列问题

亡梦爱人 提交于 2020-03-13 21:03:43
题目: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 这道题我们可以用递归或者动态规划来完成。 递归思路——根据给出的斐波那契数列公式,将F(N)视为一个函数,函数求值的过程中不断调用自身。 动态规划——将公式中的F视为一个数组,F(N)即数组中下标为N的值。 递归解法: class Solution { /** * @param Integer $n * @return Integer */ function fib($n) { if($n<2){ return $n; }else{ return $this->fib($n-1)+$this->fib($n-2); } return $dp[$n]; } } 动态规划解法: class Solution { /** * @param Integer $n * @return Integer */ function fib($n) { // if($n<2){ // return $n; // } $dp = ['0'=>0,'1'=>'1']; for($i=2;$i<=$n;$i++

不死神兔问题(斐波那契数列)

回眸只為那壹抹淺笑 提交于 2020-03-09 09:46:04
题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少? 分析 由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 … 前两个月兔子都是一对,从第三个月开始每个月的兔子是前两个月兔子的和 程序代码 非递归实现 package com.company.demo; public class MyDemo { public static void main(String[] args) { int[] arr = new int[20]; //前两个月都是1对 arr[0] = 1; arr[1] = 1; //从第三个月开始 for (int i = 2; i < arr.length; i++) { //从第三个数开始,每个数等于他前两个数之和 arr[i] = arr[i - 1] + arr[i - 2]; } System.out.println(arr[19]); } } 递归实现 package com.company.demo; public class MyDemo { public static void main(String[] args) { int num = rabbitSum(20); System.out.println(num); } private

斐波那契数列

一个人想着一个人 提交于 2020-03-08 23:02:37
斐波那契数列 f(1)=0, f(2)=1 f(n)=f(n-1)+f(n-2) 第一种方法 def fib ( n ) : if n <= 2 : return n - 1 return fib ( n - 1 ) + fib ( n - 2 ) for i in range ( 2 , 20 ) : print ( fib ( i ) ) 第二种方法 def fib ( x ) : a = [ 0 , 1 ] if x <= 2 : return a for i in range ( x - 2 ) : c = a [ - 1 ] + a [ - 2 ] a . append ( c ) print ( a ) fib ( 20 ) 来源: CSDN 作者: YoyoWon 链接: https://blog.csdn.net/YoyoWon/article/details/104735699

斐波那些数列

帅比萌擦擦* 提交于 2020-03-07 14:04:02
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路:   首先想到的肯定是使用递归 class Solution { public: int Fibonacci(int n) { if(n<=0) return 0; if(n==1 || n==2) return 1; return Fibonacci(n-1)+Fibonacci(n-2); } };  接着采用递推的方式,使用循环计算斐波那契数列 class Solution { public: int Fibonacci(int n) { int fn1 = 1; int fn2 = 1; if(n <= 0) { return 0; } if(n == 1|| n ==2) { return 1; } while(n-- > 2) { fn1 = fn1 + fn2; fn2 = fn1 - fn2; } return fn1; } }; 后来又在网上看到了另一种解法,使用动态规划的方法来做的(但我并没有运行成功,总是说我没有初始化,但理论感觉还是行得通的,所以记录下) class Solution { public: int Fibonacci(int n