首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fibonacci数列第n项的第7种计算方法:Python列表

前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享第...8种),主要演示列表的append()和pop()这两个方法和反向索引的用法。...如果n小的话,可以只append()不pop()(注意,这样的话append()的参数要改为data[-1]+data[-2]),但是如果n很大的话会导致内存崩溃。...下面的代码使用第800万项对本文的第7种方法和前面6种中最快的方法3进行了测试和对比,事实证明,算法3是无敌的,也是最简单的。 大家不妨分析一下,本文的方法7比方法3慢的原因是什么?...(0) return data[-1] n = 8000000 for fibo in (fibo3, fibo7): start = time() r = str(fibo(n))

65140
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript初级玩法(3)—兔子问题(斐波那契数列)

    [n-1]; } f(12); 运行结果 f(12) // 144 一年后,共有144对兔子 分析 解决这种问题,我们一定要找到其中的规律,看下图 ?...从图中我们能看到的规律: 从第三个月开始,第n个月兔子的总对数=第(n-1)月兔子的总对数+第(n-2)月兔子的总对数,也就是前面相邻两项之和,构成了后一项。...仔细思考这个规律,我们来写代码,这个规律其实就是在不断的把前两项相加,得到后一项,不断的重复这个事情,想到这我们应该会想到用循环来写,第一个月和第二个月比较特殊,我们用数组先保存下,然后就简单了,不断的把前两个月的数量相加...(`第1个月,共有${Fibonacci[0]}对兔子`); console.log(`第2个月,共有${Fibonacci[1]}对兔子`); for(var i=2;in...递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。

    1.9K60

    算法系列02

    项为1,第n项由n-1项加n得到      **/     public class SanJiao {         public static void main(String[] args) {...--------------------------------------------------------- /**  * Fibonacci数列中第1,2项为1,第n项由n-1项加n-2项得到...n==2){             return 1;         }else {             return Fibonacci(n-1)+Fibonacci(n-2);        ...,这样关键字最小的数据项(或者最大)总是在队头,  * 数据项插入时会按照顺序插入到合适的位置,确保队列的顺序  **/ public class PriorityQueue {     private...* 2.从根开始查找一个相应的节点,即新节点的父节点,当父节点找到后,根据新节点的值来确定新节点是连接到左子节点还是右子节点  *  * 查找节点:从根开始查找,如果查找节点值比父节点要小,则查找其左子树

    12520

    面试题精选:神奇的斐波那契数列

    求解斐波那契数列第n项有很多种方式 递归求解 根据其递归定义,我们很容易写出以下递归函数来计算斐波那契第n项。...矩阵幂运算 上面已经说了比内公式有低效和精度损失的问题,我这里当然有更牛x的方案了,那就是借助矩阵的运算来解决,借助如下公式,我们可以计算出斐波那契的第n项。 ?...面试题扩展 求斐波那契第n项虽然看起来很基础,但它也有着很高级的解法,平凡中蕴藏着不凡。...fib(i)对应的是斐波那契的第i项,找到所有第fin(i)个素数(i第6765个素数是67931。...欢迎关注我的面试专栏面试题精选,永久免费 持续更新,本专栏会收集我遇到的比较经典面试题,除了提供详尽的解法外还会从面试官的角度提供扩展题,希望能帮助大家找到更好的工作。

    78620

    万字肝货 | 讲述Python在 高中信息技术 中的6大应用问题!

    其规则为:数列的第0项是0,第1项是第一个1,从第三项开始,每一项均等于前两项之和,即:0,1,1,2,3,5,8,13,21…… 1.Fibonacci数列的数学解析 一般而言,兔子在出生两个月之后就会有繁殖能力...:前两种(if和elif)通过判断参数n是0还是1来分别对应Fibonacci数列的前两项0和1,二者均通过return语句来返回对应的数值。...第三个分支(else)是“return fib1(n-1)+fib1(n-2)”,意思是递归运算返回该项前两项值的和:F(n)=F(n-1)+F(n-2)。...4.求任意项Fibonacci数列的Python编程 理论上讲,Fibonacci数列的值是无穷的,如何使用Python编程来实现输出Fibonacci数列任意项?...之后的每一格中的米粒数目都是相邻前一格的两倍,一直放到最后的第64格,我只要这一棋盘的大米。”

    2.7K20

    fibonacci数列递归,动态规划,循环+递推三种方法的性能比较

    为什么时间复杂度会如此之高,对于给定的一个项数n(n>=2),每次求解都需要两次进行递归,所以时间复杂度为O(2^n)。...而通过递归写法的动态规划也称为记忆化搜索,通过递归记录子问题的解,一般将解存储在数组,而后通过索引找到对应问题的解。....data段,如果在函数中开辟会占用大量的栈空间 long long fibonacci(int n){ assert(n > 0);//防止传入错误的数据,进行断言 if(n ==...dp数组 int n; //注意fibonacci的项,太大会溢出 scanf("%d",&n); printf("fib(%d) = %lld\n",n,fibonacci...(n)); return 0; } 通过记忆化搜索的方式,只需要O(n)的时间复杂度即可计算出fibonacci数列的第n的值,相比直接递归求解时间复杂度O(2^n)得到了大大的提升,算法的性能显著提高

    69720

    Js算法与数据结构拾萃(1)

    为了找到匹配的那个人,我们要求每对人必须彼此聊天,这样的操作是非常累人的。 这种题目既然给出来,就不会指望你用暴力的方法来算的。此处算法复杂度为O(n 2),空间复杂度为O(1)。...就是求fib数列第n项。这是leetcode通过率排前几名的题目之一。...然而,递归在程序的世界总是恐怖的存在。 ? 递归涉及了大量的重复计算。以求解fib(5)为例:递归树就重复了3次fib(2)的计算。 ? 解法二:递推 我想解法二才是需要考察的程序员思维。...考虑用缓存去计算当前的项。你可以用一个数组去已经推出的斐波拉契数。第n项根据第n-1和n-2项推出。...还有一种人,就是从网上找到了通项公式如下: ? 直接用表达式来计算。都通过了测试用例。

    74930

    【JavaScript 算法】动态规划:最优子结构与重叠子问题

    表格法(Tabulation) 表格法是一种自底向上的解决方法,通过迭代计算所有子问题的解,并将这些解存储在一个表中。这样,每当需要计算一个子问题时,可以直接查表得到结果。...- 第 n 项的斐波那契数值 */ function fibonacci(n, memo = {}) { // 基准条件:如果 n 小于等于 1,则返回 n if (n n; // 如果 memo 对象中已经存在第 n 项的结果,则直接返回 if (memo[n]) return memo[n]; // 否则,计算第 n 项的结果,并将其存储在 memo...对象中 memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo); // 返回第 n 项的结果 return memo[n];...} // 示例:计算斐波那契数列的第 10 项 console.log(fibonacci(10)); // 输出55 在上述代码中,我们使用了一个 memo 对象来存储已经计算过的斐波那契数值,这样在遇到重复子问题时可以直接返回结果

    49510

    【基础算法】递归算法

    无论是递归算法还是递归函数,最大的特点都是“自己调用自己”。 斐波那契数列 斐波那契数列的规律是:第一项是1,第二项是1,以后每一项都等于前两项之和。我们的问题是:斐波那契数列的第n项是多少?...F(n)=\begin{cases} 1\quad n=1\\ 1\quad n=2\\ F(n-1)+F(n-2)\quad n\geq3 \end{cases} 在计算斐波那契数列的第n项F(n...)时,首先需要得到F(n-1)和F(n-2)的值,而F(n-1)和F(n-2)也可以通过这个公式计算,所以斐波那契数列具有递归特性,可以使用递归算法计算出数列第n项的值。...递归算法解决的问题需要具有递归特性,就像上述fibonacci()函数,fibonacci(n)的值可以通过fibonacci(n-1)和fibonacci(n-2)的值相加得到,其本质就是一种反复调用自身的过程...分析递归结束的条件,放到递归函数的前面,以便及时退出。 尤其是第一点,我经常会有无从下手的情况,不知道怎么写,总想一步找到一个最优解。

    37110

    Java练习题-输出斐波那契(Fibonacci)数列

    假设所有的兔子都不会死去,问:每个月的兔子总数是多少? 根据这个问题的设定,我们可以得到的Fibonacci数列:1, 1, 2, 3, 5, 8, 13, 21, .......也就是说,Fibonacci数列中的每一项,从第3项开始,都是前两项之和。...当Fibonacci数列进行到足够大的时候,相邻两项的比值将趋近于黄金分割的值:1.6180339887… 实现思路 1.定义一个fibonacci递归方法,用于计算Fibonacci数列的第n项,在fibonacci...如果n>1,则通过递归调用fibonacci(n-1) 和fibonacci(n-2)来计算第n项的值,即前两项的和 public static int fibonacci(int n){...fibonacci(n - 1) + fibonacci(n - 2); } } 2.在main方法中,我们使用一个循环来输出fibonacci数列的前20项,不断地循环调用定义的

    33040

    算法学习:递归

    斐波那契数列的定义是这样的:数列的前两项通常是1(有些定义中第一项为0,第二项为1),之后的每一项都是前两项之和。...// 递归条件:n的值由前两个斐波那契数相加得到 return fibonacci(n - 1) + fibonacci(n - 2); } } console.log(fibonacci...(n - 2); } console.log(fibonacci(30)); // 效率极低 这段代码定义了一个带有深度限制的阶乘计算函数factorialWithDepthLimit,旨在防止因递归调用过深而导致的栈溢出错误...优化策略示例:使用记忆化(缓存) // 初始化一个Map用于存储已经计算过的斐波那契数,键为n,值为第n项斐波那契数 const memo = new Map(); // 定义一个使用记忆化的斐波那契函数...,将结果存入memo中,供后续可能的使用 memo.set(n, result); return result; } // 调用优化后的函数计算第30项斐波那契数,由于使用了记忆化技术

    10510

    什么是递归函数?

    大家好,又见面了,我是你们的朋友全栈君。 递归函数 递归 例题 特点 效率 优点 递归函数 递归 递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。...斐波那契数列 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, ··· 这个数列从第三项开始,每一项都等于前两项之和....() { long number; puts("请输入一个正整数: "); scanf("%ld", &number); printf("斐波那契数列第%ld项为: %ld...\n", number, fibonacci( number ) ); } 应用题~~ 小明为了学好英语,需要每天记单词,第一天记1个,第二天记2个依次类推,请用代码完成,算出小明第10天开始的时候会了多少个单词...\n", num); return 0; } 特点 递归函数特点: 1. 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算5的阶乘时每递推一次变量都不同; 2.

    1K20
    领券