首页 > 其他分享 >斐波那列数列的讲解过程

斐波那列数列的讲解过程

时间:2023-10-09 15:11:53浏览次数:33  
标签:f1 数列 斐波 讲解 那列 def

python案例

解释的有点不好,多多包含

def f1(n):
    if n<=2:
        return 1;
    else:
        return f1(n-1)+f1(n-2)

# print(f1(6))
"""
    示例1
    解释一下他是如何等8的,递归不是直接返回值再去传递给自身函数,比如n=4的时候,那么f1(4-1)+f1(4-2) = f1(3)+f1(2)不是等5再传递给函数的
    他是先算出f1(n) = 多少,然后后面才知道f1(6)的值是多少
    比如:
        print(f1(6)) 
        "return f1(n-1)+f1(n-2)"

        f1(6-1) + f1(6-2) => f1(5) + f(4)
        
        f1(5-1) + f1(5-2) => f1(4) + f(3)

        f1(4-1) + f1(4-2) => f1(3) + f(2)

        f1(3-1) + f1(2-2) => f1(2) + f(0)

        这里的f1(0,1,2)都是等于1的,我们知道斐波那列的公式是第一位加第二位等第三位,所以,(f1(1) = 1 + f1(2) = 1) = f1(3) = 1 + 1 = 2  f1(3)就等2
        现在我们知道f1(3) 是等"2"了,然后 就可以计算出 f1(4)了  f1(4)就是等于f1(4) = f1(3) + f1(2) ,已知 f1(3)的值等2 ,f1(2)的值等1 所以 f1(4) = f1(3)=>2 + f1(2)=>1 = 3,所有f1(4)的值=3
        现在知道f1(1)=1 , f1(2)=1 , f1(3)=2, f1(4)=3 
        就可以算出f1(4,5,6,7,8)了,程序是这样算的,我反正脑子转不过来总是以为是携带返回值然后再去传递函数。。。
"""

def f2(n):
    if n<=2:
        return 1;
    
    a = 1
    b = 1
    c = 0
    #这里为什么从第二个循环开始,是因为这个公式的前2个数是1,1 那么就不需要计算他,如果你输入n=3就循环1次,输入4就循环2次,以此类推
    for i in range(2, n):
        print("n的数值是:",format(i))
        # a , b = b, (a+b) % 1000000007
        c = (a + b) % 1000000007
        a = b
        b = c
        
    return c
print(f2(7))
"""
    示例2
        这个是用循环计算出来的
        已知a = 1 b = 1 ,c 的值不用管,依次循环5次,
        第一次循环:
            c = a + b = 1 + 1 = 2 那么c现在等2
            a = b = 1 ,因为这才是第一次循环,拿的值是上面b的变量值,
            b = c = 2 ,上面计算的a+b就是等c的值,现在注意,C是不是等2,A是不是等1,B是不是等2,所以
        再次第二次循环:
            已知上面循环的C=2,A=1,B=2,这里的C不用管它,计算a+b的C才是有用的,
            那么计算公式就是
                c = a + b = 1 + 2 = 3,现在C等3了
                a = b = 2,B等于上面第一次循环B=C的值就是等2
                b = c = 3  所以现在B又等于现在a+b的值,C = 3 ,A = 2 ,B = 3
        再次循环
            知道上面的C = 3 ,A = 2 ,B = 3
            C = a + b = 2 + 3 = 5
            a = b = 3
            b = c = 5
        再次循环
            知道上面的C = 5 ,A = 3 ,B = 5
            C = a + b = 3 + 5 = 8
            a = b = 5
            b = c = 8
        再次循环
            知道上面的C = 8 ,A = 5 ,B = 8
            C = a + b = 5 + 8 = 13
            a = b = 8
            b = c = 13
        然后以此类推下去的    

"""

 

标签:f1,数列,斐波,讲解,那列,def
From: https://www.cnblogs.com/jsyphp/p/17751785.html

相关文章

  • 算法:打印斐波那契数列的前30项(JS)
    打印斐波那契数列的前30项提示:斐波那契数列的前两项是1,其他项是之前两项之和1functionfibonacciIterative(n){2if(n<=0){//如果输入的n小于等于0,表示输入错误,返回错误提示3return"输入错误,请输入正整数";4}5leta=1;//初始化......
  • P3901 数列找不同 【莫队】
    P3901数列找不同莫队:一种离线处理的优化暴力解法,时间复杂度在n*n^(1/2),会被卡常数,但是极为简单推荐视频:莫队算法点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[N];intpos[N];structnode{ intl,r,k;}t[N];strings......
  • 关于斐波那契数列 - 2 (平方的和)
    令斐波那契数列的第\(i\)项定义为\(b_i\)。再令\(f_n=\underset{i=1}{\overset{n}{\sum}}b^2_i\)结论:\(f_n=b_n\timesb_{n+1}\)首先,不难发现,该结论对于\(n=1\)和\(n=2\)一定是成立的\[f_1=1=1\times1\]\[f_2=1+1=2=1\times2\]......
  • 关于斐波那契数列 - 1
    令斐波那契数列第\(i\)个为\(F_i\)\(F_0=0,F_1=1,F_2=1\…\…\)结论:\(F_n^2=F_{n-1}F_{n+1}-(-1)^n\)不难发现,这一结论对于\(n=1\)显然是成立的接下来,运用数学归纳法若该结论对于\(n=k-1\)成立则\(F_{k-1}^2=F_{k-2}F_{k}-(-1)^{k......
  • 「高等数学」1.2 数列的极限
    数列极限的定义数列概念:如果按照某一法则,对每个\(n\in\mathbf{N_{+}}\),对应着一个确定的实数\(x_n\),这些实数按照下标\(n\)从小到大排列得到的一个序列\[x_1,x_2,x_3,\dots,x_n,\dots\]就叫做数列,简记为数列\(\left\{x_n\right\}\).数列中的每一个数......
  • 以下是一个复杂的 C 语言代码示例,展示了如何使用递归函数来计算斐波那契数列: ```c #i
    以下是一个复杂的C语言代码示例,展示了如何使用递归函数来计算斐波那契数列:#include<stdio.h>//递归函数计算斐波那契数列intfibonacci(intn){if(n<=1){returnn;}returnfibonacci(n-1)+fibonacci(n-2);}intmain(){intnum;......
  • 数列
    起因坐车两小时准备来道简单的数列题,然后发现不会做()时隔两个月再回来看看((然后和数列求导放缩的一起写了待我写完政治(虚弱题目设数列{\(a_n\)}的前n项和\(S_n=pn^2+qn\).若\(a_1^2\)+\(a_3^2\)\(\leq\)10,求\(a_3\)+\(a_4\)+\(a_5\)的最大值,并求此时\(p\)、\(q\)的值.解法......
  • [Резюме] 基础数列分块
    Preface分块可以\(O(n\sqrt{n})\)解决不能用线段树解决的问题,即不能快速合并区间信息的问题,是很多高级算法与数据结构的基础。本篇只是作者基础入门的一些感受,例题为\(\text{LOJ}[6277,6285]\),下一步计划学习莫队算法,这里有学习总结。Content0如何分块?考虑将标准块大小定......
  • 二阶差分——进行一个等差数列的加
    一般的差分用于对一段区间进行加减,但如果在该区间内加减的是一段等差数列呢?对于一段区间[l,r],加一段首项为s,末项为e的等差数列。其公差d=(s-e)/(r-l+1)为简化问题讨论,先假设这段区间都为0。原数组:0000000添加后的数组:0046800第一次差分:00422-8......
  • P1182 数列分段 Section II 题解
    Problem考察知识点:二分、贪心。题目描述对于给定的一个数组,现要将其分成\(M\)段,并要求每段连续,且每段和的最大值最小。思路二分答案出每段和最大值的最小值,然后贪心检验是否满足。难点在\(check\)上。策略:每次开始循环,如果没有超范围,就一直选,知道选满为止,求最大值。代......