Python---函数递归---练习:斐波那契数列(本文以递归算法为主)

编程思想:

如何利用数学模型,来解决对应的需求问题;然后利用代码实现对应的数据模型

算法:使用代码实现对应的数学模型,从而解决对应的业务问题

程序 = 算法 + 数据结构

在经常使用的算法中,有两种非常常用的算法

递推算法 + 递归算法,专门用于解决一些比较复杂,但是拆分后相似度又非常高的程序

什么是递归算法

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量

简化问题:找到最优子问题(不能再小) ② 函数自己调用自己


def func():# 自己调用自己-------需要有----结束的条件func()func()

递归两种重要的元素

递归有两个非常重要的概念:

递归点:找到解决当前问题的等价函数(先解决规模比当前问题小一些的函数,依次类推,最终实现对问题的解决)------有递有归

② 递归出口:当问题解决的时候,已经到达(必须存在)最优问题,不能再次调用函数了

注:如果一个递归函数没有递归出口就变成了死循环

编写递归三步走

① 明确你这个函数想要干什么

如:求斐波那契数列

② 寻找递归结束条件

如:就是在什么情况下,递归会停止循环,返回结果

出函数的等价关系式----------可以通过自己列举,找到规律

如:斐波那契数列,第n位 f(n) = f(n-1) + f(n-2)

案例:使用递归求斐波那契数列

第一步:明确这个函数想要干什么(先定义出来,明确调用方式


# 斐波那契数列 1 1 2 3 5 8 13 21 ...
def f(n):   #  先定义一个函数,求结果。# 编写递归代码求第n位的结果# 调用函数-----根据定义的函数,求结果。
print(f(15))  # 610

第二步:寻找递归的结束条件


# 斐波那契数列 1 1 2 3 5 8 13 21 ...
def f(n):    # 先定义一个函数,求结果。# 编写递归代码求第n位的结果------根据递归的结束条件if n == 1 or n == 2:return 1# 调用函数-----根据定义的函数,求结果。
print(f(15))  # 610

第三步:找出函数的等价关系式(最关键的一步)


# 斐波那契数列 1 1 2 3 5 8 13 21 ...
def f(n):    # 先定义一个函数,求结果。# 编写递归代码求第n位的结果------根据递归的结束条件if n == 1 or n == 2:return 1# 找出与斐波那契数列等价的关系式return f(n-1) + f(n-2)# 调用函数-----根据定义的函数,求结果。
print(f(15))  # 610

图示--------就很简单,不用像 递推算法那么麻烦,利用字典方式求斐波那契数列值


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RC低通滤波电路直接带载后会发生什么?

1、滤波的含义 滤波是频域范畴,它说的是不同频率的信号经过一个电路处理后,信号发生变化的问题,变化包含了原始信号幅值和相位的变化,滤波电路对信号的幅值做出的响应称为幅频响应,对信号相位做出的反应称为相频响应。…

设计模式---第五篇

系列文章目录 文章目录 系列文章目录前言一、知道观察者模式吗?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、知道观察者模式吗? 答:观察者模式是定义对…

逸学java【初级菜鸟篇】12.网络通讯编程

hi,我是逸尘,一起学java吧 目标(任务驱动) 请练掌网络通讯的内容。 局域网和互联网 局域网英文:Local Area Network,缩写:LAN,是指一群通过一定形式连接起来的计算机,…

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中,API的返回结果在可以在其他线程中进行分次打印,但是在main方法中直接打印返回结果,显示为空。这种情况下不利于二次封装,希望在main方法中获取完整的API返回结果…

Linux——基本指令(一)

写在前面: 我们云服务器搭建的Linux系统,使用的镜像版本CentOS 7.6,使用的Xshell远程连接云服务器 前面我们使用超级管理员root账号登录,一般我们使用普通用户登录,那么如何创建新用户呢? 1.创建新用户 &#xff08…

Ubuntu22.04无需命令行安装中文输入法

概要:Ubuntu22.04安装完成后,只需在设置中点点点即可完成中文输入法的安装,无需命令行。 一、安装中文语言包 1、点击屏幕右上角,如下图所示。 2、点击设置 3、选择地区与语言,点击管理已安装的语言 4、点击安装 5、输…

KALI LINUX附录

预计更新 第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 …

docker: Error response from daemon: network hm-net not found.

在使用Docker部署RabbitMQ的时候出现错误:docker: Error response from daemon: network hm-net not found. docker run \-e RABBITMQ_DEFAULT_USERuser \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5…

java对象的创建过程是怎样的?

Java对象的创建过程主要分为五个步骤: 1. 加载类信息:当我们使用new关键字来创建一个对象时,首先会去检查这个类的信息是否已经被加载到内存中。如果没有加载,就会先加载。 2. 分配内存空间:在JVM的堆内存中为新的对…

ElasticSearch之Analyze index disk usage API

本API用于分析、统计指定index当前占用的存储空间。 考虑到本特性目前仍然处于预览状态,因此使用方法、参数等可能会发生变化,或者未来也许会被删除。 本API暂时不建议在生产系统中使用。 命令样例如下: curl -X POST "https://localh…

目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】图像识别

目录 知识储备 OpenCV中的图像形态学 基于图像识别的水位测量 目标图像的提取和预处理

PHP常见错误

初学者在编程时,经常会遇到各种错误,那么如何 正确的处理错误则是可以提高开发效率。 一:错误(Error) 1.1 什么是错误及错误的级别 错误是指在开发阶段中由一些失误引起的程序问题,根据其出现在编程过程…

❀My学习Linux命令小记录(10)❀

目录 ❀My学习Linux命令小记录(10)❀ 36.fold指令 37.expr指令 38.iperf指令 39.telnet指令 40.ssh指令 ❀My学习Linux命令小记录(10)❀ 36.fold指令 功能说明:控制文件内容输出时所占用的屏幕宽度&#xff0c…

上门按摩APP小程序,抓住机遇创新服务新模式;

上门按摩APP小程序:抓住机遇,创新服务新模式; 随着现代人对生活质量要求的提高,上门按摩服务正成为一种新的、受欢迎的生活方式。通过APP小程序,用户可以轻松预约按摩服务,解决身体疲劳问题,享受…

Python程序员入门指南:学习时间和方法

文章目录 标题Python程序员入门指南:学习时间、方法和就业前景学习方法建议学习时间 标题 Python程序员入门指南:学习时间、方法和就业前景 Python是一种流行的编程语言,它具有简洁、易读和灵活的特点。Python可以用于多种领域,如…

设计模式基础(1)

目录 一、设计模式的定义 二、设计模式的三大类别 三、设计模式的原则 四、主要设计模式目录 4.1 创建型模式(Creational Patterns) 4.2 结构型模式(Structural Patterns) 4.3 行为型模式(Behavioral Patterns&…

重启路由器可以解决N多问题?

为什么重启始终是路由器问题的首要解决方案? 在日常的工作学习工作中,不起眼的路由器是一种相对简单的设备,但这仍然是我们谈论的计算机。 这种廉价的塑料外壳装有 CPU、随机存取存储器 (RAM)、只读存储器 (ROM) 和许多其他组件。 该硬件运行预装的软件(或固件)来管理连接…

牛客算法心得——kotori和素因子(dfs)

大家好,我是晴天学长,传智杯的题,一个经典的全排列找最小的问题,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .kotori和素因子 链接:https://ac.nowcod…

使用Redis构建简易社交网站(1)-创建用户与动态界面

目的 本文目的:实现简易社交网站中创建新用户和创建新动态功能。(完整代码附在文章末尾) 相关知识 本文将教会你掌握:1.redis基本命令,2.python基本命令。 redis基本命令 hget:从哈希中获取指定域的值…

Leetcode2661. 找出叠涂元素

Every day a Leetcode 题目来源:2661. 找出叠涂元素 解法1:哈希 题目很绕,理解题意后就很简单。 由于矩阵 mat 中每一个元素都不同,并且都在数组 arr 中,所以首先我们用一个哈希表 hash 来存储 mat 中每一个元素的…