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

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


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OGG实现Oracle19C到postgreSQL14的实时同步

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

如何从 Jira 成功迁移到极狐GitLab,看这个就够了!

内容来源:https://about.gitlab.com/blog 作者:Melissa Ushakov Atlassian 之前表示,到 2024 年 2 月会全面终止对于其服务器端产品的支持。 随着 Jira Server 的生命周期即将结束,众多组织都在考虑将其敏捷项目管理工具从Jira 迁…

51单片机应用从零开始(十)·指针

指针 C语言指针是一种保存变量地址的数据类型。它可以让程序直接访问内存中的数据,而不需要通过变量名来访问。指针变量存储的是一个地址,这个地址指向内存中的某个位置,该位置存储了一个值。 在C语言中,可以使用&运算符取得一…

网络安全现状

威胁不断演变: 攻击者不断变化和改进攻击方法,采用更复杂、更隐秘的技术,以逃避检测和追踪。这包括新型的勒索软件、零日漏洞利用和社交工程攻击等。 供应链攻击: 攻击者越来越关注供应链的弱点,通过在供应链中植入恶…

5_企业架构LNMP高可用负载均衡服务器

企业架构LNMP高可用负载均衡服务器之Nginx 学习目标和内容 1、能够描述负载均衡的作用 2、能够了解负载均衡常见实现方式 3、能够使用Nginx实现负载均衡 4、能够描述Nginx的常见负载均衡算法 一、背景描述及其方案设计 1、业务背景描述 时间:2011.6.-2013.9 发布产…

移动平均滤波的原理和C代码

移动平均滤波是一种简单有效的平滑信号的方法,它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种:简单移动平均(SMA)和指数加权移动平均(EWMA)。 简单移动平均滤波&#xf…

Stream API 方法使用总结

文章目录 1.1、Stream介绍1.2、Stream创建对象(1)empty()方法(2)of()方法(3)Arrays.stream()方法(4)list.stream()方法 1.3、Stream中间方法(1)filter()方法&…

SpringBoot之自定义Starter

目录 一、自己的理解 1. 理解一 2. 理解二 二、自定义starter(重点) 三、以mybatis-spring-boot-starter为例进行分析 1. 写好自己的自动配置类逻辑 2. 创建自己的starter项目并引入自动配置类项目的依赖 3. 在其它项目中使用自定义的starter 一…

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

设计基于STM32的温度传感器实时数据采集和显示系统

温度传感器作为常见的传感器之一,被广泛应用于各种领域,如工业自动化、家电控制等。为了实时监测和控制温度,设计一个基于STM32的温度传感器实时数据采集和显示系统是很有必要的。本文将详细介绍如何设计这样一个系统,并提供相应的…

nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Gitee拉取代码报错You hasn‘t joined this enterprise! fatal unable to access

文章目录 一、问题二、解决2.1、进入**控制面板**2.2、进入**用户账户**2.3、进入**管理Windows凭据**2.4、**普通凭据**2.4.1、添加2.4.2、编辑 2.5、重新拉取|推送代码 三、最后 一、问题 Gitee拉取仓库代码的时候报错You hasnt joined this enterprise! fatal unable to ac…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询: 语法: 2、range查询:(范围查询) 语法: 三、地理查询 1、geo_bou…

SSM新闻发布管理系统

SSM毕设分享 序号1:SSM新闻发布管理系统 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【SSM新闻发布管理系统】 师兄根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数…

【算法】单调栈题单——矩阵系列⭐

文章目录 题目列表84. 柱状图中最大的矩形(单调栈找左右两边第一个更低的位置)85. 最大矩形⭐⭐⭐⭐⭐解法1——使用柱状图的优化暴力方法解法2——单调栈 :归因到 84. 柱状图中最大的矩形 🐂 1504. 统计全 1 子矩形⭐解法1——枚…

Java 不要在父类的构造方法里面调用可以被子类重写的方法

不要在父类的构造方法(代码块)里面调用可以被子类重写的方法 我们从第一天学习Java开始,就对Java的类初始化顺序牢记于心。但是在实际开发过程中,似乎很难能接触这一部分的应用。在这之前,我也认为它只是面试中八股文而已,直到最…

The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛 今天,我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置,并从现实场景中学习,从而更好的认识和了解IAM相关的风险。比赛包括6个场景,每…

Zotero 安装及常用插件设置指南

Zotero 安装及常用插件设置指南 本指南旨在帮助用户安装并配置 Zotero。通过本教程,您将能够实现以下功能: 界面语言设置为中文使用颜色标签来区分不同阅读状态的文献重要文献标记显示影响因子、JCP和中科院分区翻译插件Sci-Hub 集成 安装和设置步骤…

leetCode 90.子集 II + 回溯算法 + 图解 + 笔记

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列 示例 1: 输入:nums [1,2,2] 输出…

基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras框架实现

项目地址(kaggle):基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras | Kaggle 项目地址(Colab):https://colab.research.google.com/drive/1gjzglPBfQKuhfyT3RlltCLUPgfccT_G9 导入依赖 在tensorflow…