计算机科学中的递归算法是把问题,递归运算法
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
递归运算法,做为一种算法在程序设计语言中广泛应用,指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。
中文名
递归运算法外文名
Recursive Arithmetic
递归运算法摘要
编辑
语音
图片递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。。
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
递归运算法定义
编辑
语音
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归的另一种定义:
递归,就是用自己的简单情况,定义自己。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
斐波那契数列是典型的递归案例:Fib(0) = 0 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。
例如:阶乘(1) = 1 [基本情况] 对所有n > 1的整数:阶乘(n) = (n * 阶乘(n-1)) [递归定义] 一种便于理解的心理模型,是认为递归定义对对象的定义是按照“先前定义的”同类对象来定义的。
例如:你怎样才能移动100个箱子?答案:你首先移动一个箱子,并记下它移动到的位置,然后再去解决较小的问题:你怎样才能移动99个箱子?最终,你的问题将变为怎样移动一个箱子,而这是你已经知道该怎么做的。
如此的定义在数学中十分常见。例如,集合论对自然数的正式定义是:1是一个自然数,每个自然数都有一个后继,这一个后继也是自然数。
递归运算法算法
编辑
语音
递归过程一般通过函数或子过程来实现。递归算法:在函数或子过程的内部,直接或者间接地调用自己的算法。
递归算法的特点
递归算法是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
递归算法要求
递归算法所体现的“重复”一般有三个要求:
一是每次调用在规模上都有所缩小(通常是减半);
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
递归运算法应用
编辑
语音
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点: 递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
递归运算法实例
编辑
语音
比如:运用递归算法查询多个上下级关系树的数据结构中的数据(C# 语法)
图片
privateviod GET()
{
int Count= 0;
Count = GetCount(1,ProductCount);
}
private int GetCount(int ParentID, int ProductCount)
{
string sqlString = "SELECT* FROM表 WHERE ID=" + ParentID;
Model model = BLL.GetModel(sqlString); //BLL.GetModel()是自定义方法
if(model != null) //条件
{
Count += model.Count;
GetCount(model.ID,Count); //递归
}
else
{
return Count;
}
//备注:当递归查询完所有的上下级关系树,该递归才会结束,才会返回Count
}
递归运算法网页中的应用
编辑
语音
在网站开发中,递归算法大量应用于无限级分类
计算机科学中的递归算法是把问题,递归运算法相关推荐
- 计算机科学中的递归算法是把问题,从计算思维的视角辨析算法中的递归与迭代...
周世杰 算法思维是计算思维的一个方面,而在计算机科学中,基于递归和迭代的思维方式在算法和程序设计中广泛应用,是算法思维的重要构成部分.因此,信息技术学科教师在基础课教学中辨析递归与迭代算法,将其作为发 ...
- 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构
本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...
- 中序建立二叉树,非递归前序遍历二叉树
内容: 编写程序,实现下述功能,并上机调试通过. 按中序顺序建立一棵二叉树: 用非递归方式遍历二叉树(先序),输出遍历序列. 步骤: 算法分析 采用二叉链表做存储结构,建立二叉树,借助于栈结构来实现二 ...
- java实现递归算法_如何在Java中实现二进制搜索算法而无需递归
java实现递归算法 by javinpaul 由javinpaul 流行的二进制搜索算法的迭代实现,用于在排序数组中查找元素. (An Iterative implementation of the ...
- 计算机科学中抽象的作用,抽象释义
在计算机科学中,抽象释义是基于在有序集合特别是格上的单调函数,计算机程序的语义的可靠逼近理论.它可以被看作对计算机程序的部分执行,获取关于它的语义信息(比如,控制结构.信息流)而不进行所有计算. 它的 ...
- 在计算机科学中算法指的是,算法 - 为什么斐波纳契数在计算机科学中具有重要意义?...
算法 - 为什么斐波纳契数在计算机科学中具有重要意义? Fibonacci数字已经成为计算机科学学生递归的一个流行的介绍,并且有一个强烈的论据,他们坚持在自然界. 出于这些原因,我们很多人都熟悉它们. ...
- 计算机科学中的常见树大全
树是数据结构中常见的数据结构,本以为只是树和节点这么简单,没想到查询了一下,发现有这么多种树的结果.现全列举出来,方便查阅. 计算机科学中的常见树 二叉树 二叉树 完满二叉树(Full):所有非叶子结 ...
- 快速排序和归并排序中一趟的理解(递归和非递归)
引:2019年408中数据结构一道考察快速排序的选择题 答案:D 定位:这道题在考察快速排序中一趟的概念.注意,基本的冒泡,插入,选择排序的一趟概念很容易理解, 接下来我们要讨论的是递归排序算法中(本 ...
- 3. ackerman函数的递归实现算法用java语言_ackerman函数递归算法
5-2 已知 Ackerman 函 5-1 已知 A[n]为整数数组,试写出实现下列运算的递归算法: (1) 求数组 A 中的最大整数. (2) 求 n 个整数的和. (3) 求 n...... 2 ...
最新文章
- 哈夫曼树实现压缩文件
- 数据库的网站基础运用
- 关于网络线与电话线共用之体会
- 笔试真题及其答案解析:国内各大银行计算机方向笔试之计算机基础知识—选择题120题
- 北航成教计算机课程,成教生:从问题学生到北航计算机本科生
- MFC 定时器用法 SetTimer、KillTimer
- 数据挖掘肿瘤预测_喜欢临床预测模型|SEER数据挖掘的期刊有哪些
- oracle any 语法,Oracle Any/Some
- 制作CAB自解压文件的工具——IExpress
- 35 岁以下科技创新 35 人之一,这位博士解开美团 AI 的冰山一角!
- C++ python 找标定圆点
- 胡适:一个最低限度的国学书目
- (已更新)短视频去水印解析客户端小程序源代码
- Ubuntu 20.04 环境下 PyCharm 输入框不跟随光标问题
- phpstorm如何找回删除的文件
- 为什么要从 Windows 7 升级到 Windows 10?
- 51单片机学习笔记(清翔版)(19)——串口通信
- 五大常用项目管理工具软件-也支持敏捷开发
- 产品介绍 | 51LA短链分发平台
- 为简化品牌形象,京东将域名360buy.com重命名为jd.com
热门文章
- post如何获取到referrer_如何使用 ThinkJS 优雅的编写 RESTful API
- mysql前两个月_MySQL数据库表始终保持最近两个月的记录
- mysql修改引擎_修改MySQL引擎
- android java写文件_Android中文件的读写(一)----流操作
- Leecode刷题热题HOT100(14)——最长公共前缀
- 如何高效的将 DataReader 转成 List<T> ?
- PostgreSQL中UUID的完整指南
- SqlServer:带IN()子句C#的参数化查询
- mysql 宽容模式_SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled)
- python生成随机数random操作_Python random生成随机数示例