递归和迭代

递归和迭代一.递归(Recursion)1.递归:以相似的方式重复自身的过程2.递归在程序中表现为:在函数的定义中直接或间接调用函数自身3.递归和循环:(1)递归是有去(递去)有回(归来),因为存在终止

大家好,又见面了,我是你们的朋友全栈君。

一.递归(Recursion)

1.递归:以相似的方式重复自身的过程

2.递归在程序中表现为:在函数的定义中直接或间接调用函数自身

3.递归和循环:

(1)递归是有去(递去)有回(归来),因为存在终止条件,比如你打开一扇门还有一扇门,不断打开,最终你会碰到一面墙,然后返回

(2)循环是有去无回,但可以设置终止条件,比如你打开一扇门还有一扇门,不断打开,还有门,没有终点

4.递归的递去和归来:

(1)递归的递去:原问题必须可以分解成若干个子问题,而且子问题须与原始问题为同样的事(相似),且规模更小

(2)递归的归来:子问题的演化必须有一个明确的终点,否则可能导致无限递归(无终止条件的循环),也就是说不能无限制地调用本身,须有个出口,化简为非递归状况处理

5.递归在函数中的具体形式:

(1)必须明确终止条件,并给出终止时的处理

(2)必须有间接或直接调用自身解决小规模问题的步骤

def recursion(大规模问题):

  if end_condition:                                  #终止条件

    end                                               #终止的处理

  else:

    recursion(小规模子问题)    #调用自身

6.递归的应用:

(1)问题的定义是按递归定义的(Fibonacci函数,阶乘,…);

(2) 问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题,…);

(3) 数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度,…)

7.递归的优缺点

(1)递归的优点:简洁,容易处理问题,代码可读性高

(2)时间和空间消耗大

8.递归式求解的基本方法

(1)代换法

1.猜对答案

2.用数学归纳法求解常系数,并验证递归式解的正确性

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

例:已知:<span role="heading" aria-level="2">递归和迭代T(n)= O(n lgn)

则计算<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

(2)递归树

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

(3)主方法:不是所有情况都包括

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

<span role="heading" aria-level="2">递归和迭代

 

二.迭代

1.迭代:是一种为了逼近所需目标或结果,不断用变量的旧值递推新值的过程

2.迭代在程序中的表现:函数不断调用原函数的返回值,

3.迭代与循环,迭代和递归一样,也是循环的一种

(1)循环:参与运算的变量同时是保存结果的变量

(2)迭代:当前保存的结果作为下一次循环计算的初始值。迭代则使用计数器结束循环。

4.迭代和递归

(1)迭代:函数内某段代码实现循环,函数调用时使用前一次循环的返回值作为初始值,A调用B,使5用计数器结束循环

(2)递归:重复调用自身实现循环,A调用A,设置结束条件

(3)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,

5.迭代在程序中的表示:

(1)必须设置计数器,可以通过计数设置或条件设置,否则会一直迭代

(2)必须有返回值可以作为再次迭代的初值

def iteration(A):

  return B

C

 

for i in range(n):

  C=interation(C)

6.迭代的优缺点

(1)优点:代码效率高,时间空间消耗比递归小

(2)缺点:不够简洁,容易混淆

 

 

 

 

 
 
 
 
 
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154361.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 艺术概论[通俗易懂]

    目录一.艺术的本质与特征艺术本质1.客观精神说2.主观精神说3.模仿说/再现说艺术的特征二.艺术的起源中外艺术史上关于艺术起源的五种观点艺术起源的第六种看法:多元决定论三.艺术的功能与艺术教育艺术的社会功能艺术教育四.文化系统中的艺术作为文化现象的艺术艺术与哲学艺术与宗教艺术与道德艺术与科学五.实用艺术实用艺术的主要种类实用艺术的审美特征中外实用艺术精品赏析六.造型艺术造型艺术的主要种类造型艺术的审美特征中外造型艺术精品赏析七.表情艺术表情艺术的主要种类表情艺术的审美特征中外表情艺术的精品赏析八.综合

  • Django外键(ForeignKey)操作以及related_name的作用

    Django外键(ForeignKey)操作以及related_name的作用之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息  首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示)      那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?   首先我们先查询到老师的信息,在这里我们使用pyt

  • 学习使用口令激活成功教程工具:hashcat、LC、SamInside

    学习使用口令激活成功教程工具:hashcat、LC、SamInside在学习使用口令激活成功教程工具之前,我们要先创建一个用户账号,原理是利用其哈希值进行激活成功教程。很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!很关键的一点是,要在虚拟机里面创建用户!!!重要的事情一定要说三遍。在宿主机(我是win10系统)创建用户获取的hash值是假的,根本无法用于激活成功教程。我个人猜测,是由于宿主机存在某种保护机制,使得不让获取到真正的hash。因…

  • 简述Python特点_python优缺点

    简述Python特点_python优缺点python特点1.软件质量(特色)在很大程度上,python更注重可读性、一致性和软件质量,python的设计致力于可读性,带来了比其他语言更优秀的可重用性和可维护性,python秉承了一种独特的简洁和高可读性的语法,以及一种高度一致的编程序模式。2.提高开发者效率(特色)相对于C、C++、Java等编辑/静态类型语言,python的开发效率提升了3-5倍,也就是说代码量是其他…

  • Java中创建对象数组[通俗易懂]

    Java中创建对象数组[通俗易懂]1.对象数组的概念:如果一个数组中的元素是对象类型,则称该数组为对象数组。当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。2.对象数组的定义和使用:对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。3.对象数组的实例化:类名[]对象数组名=new类名[数组大小]以创建Student类的对象数组为例Student[]stu=newStudent[20];//创建20个学生对象对学生类的每一个数组元素进行

  • 软考总结

    软考总结

    2021年11月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号