递归的基本概念

news/2024/11/15 8:32:53/

 分类:
    直接递归
    间接递归

如果递归函数中调用递归的语句为最后一个执行语句,则称这种递归为尾递归

递归使用条件
    原问题可以划为一个或多个子问题,且子问题的求解方式与原问题相同,只是数量规模不同
    递归的调用次数必须有限
    必须有递归出口

递归的使用情况
    定义是递归的
        求n!
    数据结构是递归的
        单链表
    求解方法是递归的
        Hanoi问题

递归模型的组成
    递归出口
    递归体

栈和递归
    函数调用栈
        函数调用:包括一块代码到另一块代码之间的双向数据传递和执行控制转移
        数据传递通过函数参数和返回值实现,另外调用函数时还要为其局部变量分配空间并在退出时回收
        使用栈帧来支持函数调用
            每次调用函数都会创建一帧,保存返回地址、函数实参和局部变量,并将该帧压入调用栈,成为栈顶,函数一旦执行完毕,对应的帧就出栈,对应的控制权就返回给上层的函数,并按照该帧保存的返回值地址确定程序中继续执行的位置
    递归到非递归的转换
        尾递归法可以通过循环或迭代的方式转换为等价的非递归算法
        可以使用栈来模拟递归的执行过程从而实现转换

比较
    优点:结构简单,易于阅读
    缺点:占用内存多,执行效率低,不易优化


http://www.ppmy.cn/news/93971.html

相关文章

Ubuntu crontab 遇到的sh脚本一些问题(手动执行可以,自动执行不行)

问题一: 问题描述: 在写一个脚本循环时候,出现“let:not found”,这是因为在ubuntu默认是指向bin/dash解释器的,dash是阉割版的bash,其功能远没有bash强大和丰富.并且dash不支持let和i等功能. 解决办法: 打开一个终端输入&#xf…

PGXC GaussDB

PGXCA PGXC(PostgreSQL eXtended Coordinator)是一个基于 PostgreSQL 架构的分布式数据库解决方案。它扩展了 PostgreSQL,为用户提供了在多个节点上分布式存储和处理数据的能力。 PGXC 的设计目标是将 PostgreSQL 扩展为能够处理大规模数据…

Python类的属性和方法介绍

Python类的属性和方法介绍 本文主要讲python类属性(类变量)、实例属性(实例变量);类方法、静态方法、实例方法。 【定义在类中的变量也称为属性,定义在类中的函数也称为方法。】 这些都是Python面向对象…

Linux 软件包管理工具

rpm命令管理软件包 1.学会看rpm包,通过rpm包的名字来了解这个软件包的一些基础信息xfsprogs-4.19.0-2.el8.x86_64.rpm xfsprogs 软件名字 4.19.0 版本号 2 发行次数 el8 适用于哪个操作系统(rel8) x86_64 软…

计算Yocto中LIC_FILES_CHKSUM的md5值

md5网站 https://emn178.github.io/online-tools/md5_checksum.html 将源码中的LICENCE文件丢进去。 LIC_FILES_CHKSUM值的语法如下: LIC_FILES_CHKSUM " file:// license_info_location ;md5 md5_value " license_info_location 这是包含您的许可证信…

STM8使用pwm接口调试GDS06灰尘传感器

背景 刚好有项目使用GDS06这款传感器,这里简单做个记录。 GDS06接口如下,这里支持串口和PWM的输出到MCU,由于项目采用STM8S003F3P6,资源极其有限。 所以硬件设计的时候,就考虑采用PWM的接口方式,这样只是…

【数学建模】矩形桌子能放平(初等模型)

把一把四只脚的椅子往不平的地面上一放,通常只有三只脚着地,放不稳,然而只要稍挪动几次,就可以四脚着地,放稳了。如何解释这种现象? 1 模型假设 椅子四条腿一样长,椅脚与地面接触可视为一个点&…

《操作系统》期末客观题梳理

《操作系统》复习(1-9) 文章目录 《操作系统》复习(1-9)Ⅰ知识点概念第一章操作系统导论第二章进程描述与控制第三章处理机调度死锁第四章进程同步第五章存储器管理第六章虚拟存储器第七章输入输出系统第八章文件管理第九章磁盘存…