第5章——递 归

本文详细介绍了递归的基本概念,包括递归的定义、直接递归与间接递归的区别,以及递归在数学公式、数据结构(如单链表)和问题求解(如Hanoi算法)中的应用。此外,还探讨了递归模型的构成和递归执行过程的工作原理。
摘要由CSDN通过智能技术生成

5.1 什么是递归

5.1.1 递归的定义

1.在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。 若调用自身,称之为直接递归

2.若过程或函数A调用过程或函数B,而B又调用A,称之为间接递归

3.在算法设计中,任何间接递归算法都可以转换为直接递归算法来实现,所以主要讨论直接递归。 4.如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,称为尾递归

5.1.2 何时使用递归

1. 定义是递归的

有许多数学公式、数列等的定义是递归的。例如,求n!和Fibonacci(斐波那契)数列等。

def Fib(n): 			#求Fibonacci数列的第n项
  if n==1 or n==2:
    return 1
  else:
    return Fib(n-1)+Fib(n-2)

 

2. 数据结构是递归的

有些数据结构是递归的。如单链表就是一种递归数据结构。

class LinkNode:                		#单链表结点类
  def __init__(self,data=None):   	#构造函数
    self.data=data            		#dat属性
    self.next=None           		#next属性

 

3. 问题的求解方法是递归的 

def Hanoi(n,X,Y,Z):            	#Hanoi递归算法
  if n==1:			#只有一个盘片的情况
    print("将第%d个盘片从%c移动到%c" %(n,X,Z))
  else:				#有两个或多个盘片的情况
    Hanoi(n-1,X,Z,Y)
    print("将第%d个盘片从%c移动到%c" %(n,X,Z))
    Hanoi(n-1,Y,X,Z)

5.1.3 递归模型 

1. 一般地,一个递归模型是由递归出口和递归体两部分组成。

2. 递归出口确定递归到何时结束,即指出明确的递归结束条件。

3. 递归体确定递归求解时的递推关系。

                       递归出口的一般格式如下:

5.1.5  递归的执行过程 

(1)执行开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址。   (2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址进栈。  

(3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。

5.2 递归算法的设计

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值