递归求fabonacci数列 pta

embedded/2024/10/15 16:02:22/

斐波那契数列(Fibonacci sequence)是一个经典的数列,它由以下递归关系定义:

[ F(n) = F(n-1) + F(n-2) ]
其中,( F(0) = 0 ) 和 ( F(1) = 1 )。

在编程中,递归是一种实现斐波那契数列的直观方法。以下是使用递归求斐波那契数列的Python代码示例:

def fibonacci(n):if n <= 0:return 0elif n == 1:return 1else:return fibonacci(n - 1) + fibonacci(n - 2)# 测试递归函数
for i in range(10):print(f"Fibonacci({i}) = {fibonacci(i)}")

这段代码定义了一个名为fibonacci的函数,它接受一个整数n作为参数,并返回斐波那契数列的第n个数。递归的基本情况是当n为0或1时,直接返回n。对于更大的n,函数会递归地计算F(n-1)F(n-2),然后将它们相加以得到F(n)

注意事项

虽然递归方法简单直观,但它并不是计算斐波那契数列的最高效方法。递归方法在每次函数调用时都会重复计算相同的值,导致时间复杂度为O(2^n),这在n较大时会导致性能问题。

为了提高效率,可以考虑以下替代方法:

  1. 动态规划:使用一个数组或字典来存储已经计算过的斐波那契数,避免重复计算。

  2. 矩阵快速幂:利用线性代数中的矩阵快速幂方法,可以将时间复杂度降低到O(log n)。

  3. 通项公式:斐波那契数列的通项公式可以直接计算第n个斐波那契数,但由于涉及无理数的计算,当n较大时会有精度问题。

  4. 迭代方法:使用循环而不是递归来计算斐波那契数列,这种方法的时间复杂度为O(n)。

以下是使用动态规划方法实现的斐波那契数列的Python代码示例:

def fibonacci_dp(n):if n <= 0:return 0elif n == 1:return 1fib_numbers = [0, 1]for i in range(2, n + 1):fib_numbers.append(fib_numbers[i - 1] + fib_numbers[i - 2])return fib_numbers[n]# 测试动态规划函数
for i in range(10):print(f"Fibonacci({i}) = {fibonacci_dp(i)}")

这段代码通过迭代方法构建了一个包含斐波那契数列的列表,避免了递归方法中的重复计算,从而提高了效率。


http://www.ppmy.cn/embedded/39988.html

相关文章

Docker搭建ctfd平台

安装docker和docker-compose &#xff08;1&#xff09;安装docker&#xff1a; curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun&#xff08;2&#xff09;安装 Docker Compose&#xff1a; yum install docker-compose安装失败参考下面文章 https:/…

matlab人脸识别

在MATLAB中实现人脸识别通常涉及到图像处理、特征提取和分类器的使用。下面是一个简化的MATLAB人脸识别代码的概述&#xff0c;使用了PCA&#xff08;主成分分析&#xff09;作为特征提取方法&#xff0c;以及简单的分类器&#xff08;如最近邻分类器&#xff09;进行分类。请注…

Android面试题之kotlin热流和channel

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点 于冷流不同&#xff0c;在垃圾回收之前&#xff0c;flow里的值都是存在内存之中&#xff0c;并且处于活跃状态 StateFlow StateFlow是一个状态容…

Django性能之道:缓存应用与优化实战

title: Django性能之道&#xff1a;缓存应用与优化实战 date: 2024/5/11 18:34:22 updated: 2024/5/11 18:34:22 categories: 后端开发 tags: 缓存系统Redis优点Memcached优缺点Django缓存数据库优化性能监控安全实践 引言 在当今的互联网时代&#xff0c;用户对网站和应用…

Linux(Ubuntu24.04) 安装 MinIO

本文所使用的 Ubuntu 系统版本是 Ubuntu 24.04 ! # 1、下载 MinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio# 2、添加可执行权限 chmod x minio# 3、导出环境变量&#xff0c;用于设置账号密码&#xff0c;我设置的账号和密码都是 minioadmin export MI…

每周日发系统规划与管理师伴读脑图,今天是第4章

从第4章开始&#xff0c;系统规划与管理师的学习就正式步入了主题&#xff0c;考虑到我过去中断了2周&#xff0c;想必你的第4章教程已经看完了吧&#xff1f;

MySql 事务

事务ACID特性 事务&#xff1a;一组操作要么全部成功&#xff0c;要么全部失败&#xff0c;目的是为了保证数据的最终一致性。 原子性(Atomicity)&#xff1a;当前的事务要么同时成功&#xff0c;要么同时失败。原子性由undo log日志来实现。&#xff08;mysql undo log日志会…

[单机]成吉思汗3_GM工具_VM虚拟机

稀有端游成吉思汗1,2,3单机版虚拟机一键端完整版 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#x…