首页 > 编程语言 >Python数据结构实验 递归算法设计

Python数据结构实验 递归算法设计

时间:2024-03-26 09:00:50浏览次数:32  
标签:head 出栈 递归 Python self next print 数据结构

一、实验目的

1.掌握递归程序设计的基本原理和方法;

2.熟悉数据结构中顺序表和单链表下的递归算法设计思想;

3.掌握并灵活运用递归算法解决一些较复杂的应用问题。

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明 

1.实现递归算法的程序设计方法。  
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容

(1) 假设有n个互不相同的数依次入栈出栈,入栈和出栈可以交替进行,问总共可能有多少种不同的出栈序列?

思考提示(但不限于此)

设n个数入栈共有f(n)种不同的出栈序列。假设这n个数依次为1-n;假设k是第一个出栈的数;比k早进栈且晚出栈的有k-1个数,一共有f(k-1)种出栈序列;比k晚进栈且晚出栈的有n-k个数,一共有f(n-k)种出栈序列。所以一共有f(k-1)*f(n-k)种方案。

当k取不同值时,产生的出栈序列是相互独立的,所以将结果累加。k的取值范围为1至n,所以出栈序列总数f(n)=f(0)*f(n-1)+f(1)*f(n-2) + ... + f(n-1)f(0)。

自己先写出f(n)的递归公式,分为k=0和k>0两种情况考虑,再写代码。

(2)假设L是一个带头结点的单链表,设计递归算法使单链表L逆置。

参考思路:

from LinkList import LinkList,LinkNode



def Reverse(L):                 

    L.head.next=Reverse1(L.head.next,L.head.next)

    return L



def Reverse1(t,h):

    ……





#主程序

a=[                  ]

L=LinkList()

L.CreateListR(a)

print()

print("  L: ",end=''),L.display()

print("  递归逆置")

L=Reverse(L)

print("  L: ",end=''),L.display()

2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

#递归公式如下:

#当k=0时,f(0)=1

#当k>0时,f(k)=f(0)*f(k-1)+f(1)*f(k-2)+...+f(k-1)*f(0)

def s(n):   #定义递归函数S

    if n <= 1:  #当只有一个元素,则有1个出栈序列

        return 1

    f = [0]*(n+1)#定义一个长度为n+1的列表f并把所有元素初始化为0

    f[0] = 1#把f[0]初始化为1

    for i in range(1, n+1):

        for j in range(i):

            f[i] += f[j]*f[i-j-1]

    return f[n]

if __name__ =='__main__':

    print(s(7))


2. (1)给出算法的基本设计思想。  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

from LinkList import LinkList,LinkNode
def Reverse(self):

        if self.head.next is None or self.head.next.next is None:   # 当单链表为空或者只有一个节点时无需反转

            return self

        pre = None               #增加指向当前节点前一个节点的指针

        p = self.head.next

        while p is not None:

            q = p.next          #记录当前节点的下一个节点

            p.next = pre        #改变当前节点的指针方向

            pre = p             #更新前一个节点指针

            p = q               #当前节点往下移动

        self.head.next = pre    #更新头结点的指针

        return self



if __name__ == '__main__':

    a=[1,2,3,4,5]

    L=LinkList()

    L.CreateListF(a)

    print("Original List L: ", end='')

    L.display()

    print("Reversed List L: ", end='')

    head = L.Reverse().head.next

    while head != None:

        print(str(head.data)+' ', end='')

        head = head.next

    print()

标签:head,出栈,递归,Python,self,next,print,数据结构
From: https://blog.csdn.net/Jiangxia13/article/details/137020242

相关文章

  • 如何使用Python脚本自动化部署和管理物联网设备
    使用Python脚本自动化部署和管理物联网(IoT)设备涉及多个步骤,包括设备发现、配置、固件更新和远程监控。以下是一个简化的流程,展示了如何使用Python脚本来自动化这些任务:设备发现:使用网络发现协议(如UPnP或mDNS)来发现网络上的物联网设备。Python中的PyUPnP或upnpclient库可以......
  • HashMap---数据结构
    目录一、基本数据结构二、树化与退化三、索引计算四、put方法和扩容五、并发问题六、key的设计一、基本数据结构        在jdk1.7版本的时候,hashmap结构主要是使用数组+链表的格式,而在jdk1.8版本中,hashmap的数据结构增加了一种“红黑树”的结构,即数组+(......
  • python刷题
    题目:编写一个程序将分钟转换为秒。定义函数convert_to_seconds(),参数为minutes。在函数内,将分钟转换为秒(1分钟=60秒),并返回结果。实验1: 运行结果:实验2: 运行结果: 理由是什么呢? ......
  • 十 1360. 有序分数 (最大公约数|递归)
    1360.有序分数(最大公约数|递归)方法一思路:统计所有组合,并求其最大公约数是否为1,只有最大公约数为1的组合才成立,然后按组成的分数大小顺序排序。importjava.util.*;publicclassMain{privatestaticintgcd(inta,intb){returnb==0?a:gcd(b......
  • 【QT+QGIS跨平台编译】之九十一:【QGIS_Python跨平台编译】—【qgis_python.h生成】
    文章目录一、qgis_python.h介绍二、信息分析三、qgis_python.h生成一、qgis_python.h介绍  qgis_python.h是QGIS(QuantumGIS)软件中的一个头文件,主要用于服务于QGIS_Python库的编译,包含导入、导出宏信息的定义。二、信息分析在qgis\src\python目录,CMakeLis......
  • 情感分析+python
    情感分析情感分析主要基于文本数据,是自然语言处理(NPL)的主要内容。情感分析:又称意见挖掘、倾向性分析等。简单而言,情感分析是利用自然语言处理技术来分析文本中的情感信息,帮助人们更好地理解和应用大量的文本数据。1.数据如下所示2.情感处理#打分情感分析#情感分析的结果......
  • 03-python函数和列表
    函数定义def函数名():执行内容#当函数需要返回值时,return,没有返回值默认返回NonereturnxxxNone的使用场景函数返回值上if判断中,None为False定义变量时,用作变量声明,暂时变量不需要具体值global关键字(提升局部变量为全局变量)nn=100defhello():......
  • 如何系统地自学 Python
    自学Python的过程可以进一步细化为以下步骤:1.准备阶段选择Python版本:了解Python2和Python3的区别,选择较新的Python3版本进行学习。配置开发环境:安装Python,配置环境变量,确保能在命令行中直接运行Python。2.基础语法学习变量与数据类型:理解变量的概念,学......
  • Java的方法、重载、递归、内存
    一、方法什么是方法方法:一堆代码的集合,一般完成了某个特定的功能,当我们再次使用这个方法的时候,就等于使用了这些代码。方法目的:代码复用,提高程序灵活度,易维护,易扩展。方法的声明修饰符列表  返回值类型  方法名 (参数列表){ 方法体 }注意事项修饰符列表 ......
  • python_while循环
    while循环:循环要素:1.循环变量(次数)并且初始化,要放在while上面(初始值)2.循环条件(循环终值)3.循环所执行的代码4.步长(自增自减条件)1.2.3.4为循环体语法:i=1whilei<值i+=1'''循环初始值按照顺序结构只使用一次,进入循环结构后根据......