用汇编语言剖析递归算法的内在机理

合集下载

递归的工作原理

递归的工作原理

递归的工作原理
递归是一种通过调用自身来解决问题的方法。

它通过将一个大问题分解为较小的、同类的子问题来进行求解。

递归的工作原理可以概括为以下几个步骤:
1. 定义基准情况:递归函数首先需要定义一个基准情况,即最简单的情况,该情况下可以直接给出结果,而不是再次调用自身。

基准情况通常是在满足某个条件时返回固定值或特定操作。

2. 分解问题:递归函数会将给定的问题分解为更小的同类子问题。

这个过程可以通过递归调用本身来实现。

每次递归调用时,问题的规模都会减小,同时保持相同的问题类型。

3. 调用递归函数:递归函数在解决子问题时通过调用自身来实现。

通过递归调用,问题将会在不断分解和缩小的过程中得到解决。

4. 组合结果:递归函数返回的结果会被用来组合成大问题的解。

递归函数返回的结果通常会在每一层递归结束后进行合并、计算或其他操作。

5. 终止递归:为了防止递归无限循环,递归函数需要在某个条件下终止递归调用。

这个条件通常和基准情况或问题规模相关,当满足条件时,递归将停止执行。

需要注意的是,递归函数的设计需要保证每次递归调用后问题规模都会减小,否则递归可能会陷入无限循环,导致程序运行
出错或引起栈溢出。

此外,递归可能会造成重复计算,因此可以采用记忆化搜索等方法进行优化。

简述递归思维模式

简述递归思维模式

递归思维模式递归(recursion)是一种常见的问题解决思维模式,它可以将一个大问题划分为更小的子问题,然后通过解决子问题来解决原始问题。

递归在计算机科学中具有广泛的应用,尤其在算法和数据结构中非常常见。

本文将介绍递归思维模式的定义、原理、应用场景、优缺点以及一些实例。

什么是递归思维模式在计算机科学中,递归是一种通过调用自身来解决问题的方法。

递归思维模式基于一个简单的原则:将一个大问题分解为更小的子问题的解决方案。

这种分而治之的思想使得解决问题变得更加简单和可理解。

递归思维模式通常包含两个关键要素: 1. 递归基(base case):是递归过程中最简单的情况,不再需要递归调用,直接返回结果。

2. 递归步骤(recursive step):将原始问题划分为更小的同类子问题,并通过递归调用来解决。

通过这两个要素的组合,递归可以将问题规模不断缩小,直到达到递归基,从而逐步解决问题。

递归原理递归的原理可以通过数学归纳法来理解。

假设我们要证明一个性质对于所有的自然数都成立,我们可以分为两步: 1. 证明基本情况下性质成立,比如证明对于自然数1时该性质成立。

2. 假设该性质对于某个自然数n成立,然后证明对于自然数n+1也成立。

递归的原理与上述过程类似。

首先,我们需要确定递归基,即最简单的情况。

然后,我们假设在解决一个规模为n的问题时,我们已经掌握了解决规模为n-1的子问题的方法。

接下来,我们使用这个假设来解决规模为n的问题。

最后,我们将问题的规模不断缩小,直到达到递归基。

递归的应用场景递归思维模式在很多问题中都有应用,特别是涉及到树结构(如二叉树、图)的问题。

以下是一些递归的应用场景:树的遍历对于树结构,我们可以使用递归思维模式来实现遍历操作,包括前序遍历、中序遍历和后序遍历。

递归的方式非常直观,对于每一个节点,我们先处理它自身,然后递归地处理它的左子树和右子树。

组合和排列问题组合和排列问题在组合数学和算法中经常出现,例如给定一组元素,求出所有的组合或排列的情况。

语言的递归性及其根源

语言的递归性及其根源

语言的递归性及其根源钱冠连(广东外语外贸大学外国语言学及应用语言学研究中心,广州 510420)摘要:(1)递归性不仅是转换生成语法中的一种语法属性,而且它与任意性、线性一样是语言的根本性质之一。

(2)作者给出了语言递归性的定义:语言结构层次和言语生成中相同结构成分的重复或相套。

(3)作者着重论证了语言递归性,阐述了整个语言结构和言语的生成处于相同结构的重复与层层相套之中,分析了语言整体上的递归性与局部上的非递归性,并指出这二者的必要性:整体上的递归性避免了句式集合的庞大与复杂的危险,使句式有限而简单;局部的非递归性使语言在有限手段之内变得丰富起来。

语言递归性的巨大意义甚至是全部意义就在于允许人们用少量的句型生成无限多的句子。

(4)语言的递归性的根源在世界(宇宙)的递归结构与语言的递归结构处于全息状态之中。

关键词:递归;语言递归性;全息On Recursiveness of Language and Its OriginQIAN Guanlian(Center for Linguistics,Guangdong University of Foreign Studies,Guangzhou 510420)Abstract: In Part 1, the author points out that, recursiveness of language should not only be a grammatical attribute restricted to the transformational -generative grammar, but also be an essential property of language on a par with arbitrariness and linear nature of language. In Part 2, the author proposes that recursiveness of language could be defined as the reiteration or the embedded state of the same frames and elements in the structures of language as well as in the process of utterance generation. Part 3 is to give the argumentation on recursiveness of language. The gigantic significance of recursiveness of language lies in that it allows people to generate infinitely many sentences with a small number of sentence patterns. Finally, the author argues that the rootstock of recursiveness of language be that the recursive structure of the cosmos and the recursive structure of language are in a holographic state.Key words: recursion; recursiveness of language; holographics本文明确地将语言的递归性(recursiveness) ,像语言的任意性与线性一样,作为语言的根本性质之一来对待,然后着重论述,语言递归性的根源来自它的结构与宇宙的结构是全息关系。

递归算法原理

递归算法原理

递归算法原理
递归是一种算法设计技巧,它的原理是通过将一个问题分解成一个或多个规模较小但类似于原问题的子问题来解决。

递归算法通过反复调用自身来解决这些子问题,直到子问题的规模足够小并可以直接解决为止。

递归算法的主要思想是将问题转化为更小的同类问题的子问题,并在每一次递归调用中将问题的规模减小。

递归算法需要定义一个基准情况,即问题的最小规模情况,当问题达到基准情况时,递归的调用将停止,得到最终的解。

当使用递归算法时,需要注意以下几点:
1. 递归的结束条件:为了避免无限递归,递归函数必须定义结束条件,即基准情况。

2. 递归调用:在函数内部调用自身来解决规模较小的子问题。

3. 子问题规模的减小:每次递归调用时,子问题的规模应该比原问题要小。

4. 递归栈:在每次递归调用时,系统会将当前的函数调用信息存储在递归栈中,当递归调用结束后,系统将会按照递归栈的顺序逐个弹出函数调用信息,直到返回最终的解。

递归算法在解决某些问题时非常有效,例如树和图的遍历、排列组合、分治算法等。

然而,递归算法也存在一些缺点,例如
递归调用会消耗较多的内存空间和时间复杂度较高等问题,因此在实际应用中需要根据具体情况来选择是否使用递归算法。

递归算法详解完整版

递归算法详解完整版

递归算法详解完整版递归算法是一种重要的算法思想,在问题解决中起到了很大的作用。

它通过将一个大问题划分为相同或类似的小问题,并将小问题的解合并起来从而得到大问题的解。

下面我们将详细介绍递归算法的定义、基本原理以及其应用。

首先,我们来定义递归算法。

递归算法是一种通过调用自身解决问题的算法。

它通常包括两个部分:基础案例和递归步骤。

基础案例是指问题可以被直接解决的边界情况,而递归步骤是指将大问题划分为较小问题并通过递归调用自身解决。

递归算法的基本原理是"自顶向下"的思维方式。

即从大问题出发,不断将问题划分为较小的子问题,并解决子问题,直到达到基础案例。

然后将子问题的解合并起来,得到原始问题的解。

递归算法的最大特点是简洁而优雅。

通过将复杂问题分解为简单问题的解决方式,可以大大减少代码的复杂程度,提高程序的效率和可读性。

但是递归算法也有一些缺点,包括递归深度的限制和复杂度的不确定性。

过深的递归调用可能导致栈溢出,而不合理的递归步骤可能导致复杂度过高。

递归算法有许多应用场景,我们来介绍其中一些典型的应用。

1.阶乘问题:计算一个数的阶乘。

递归算法可以通过将问题划分为更小的子问题来解决。

例如,n的阶乘可以定义为n乘以(n-1)的阶乘。

当n 等于1时,我们可以直接返回1作为基础案例。

代码如下:```int factorial(int n)if (n == 1)return 1;}return n * factorial(n - 1);```2.斐波那契数列问题:求斐波那契数列中第n个数的值。

斐波那契数列的定义是前两个数为1,然后从第三个数开始,每个数都是前两个数的和。

递归算法可以通过将问题划分为两个子问题来解决。

当n等于1或2时,直接返回1作为基础案例。

代码如下:```int fibonacci(int n)if (n == 1 , n == 2)return 1;}return fibonacci(n - 1) + fibonacci(n - 2);```3.二叉树问题:对于给定的二叉树,递归算法可以通过递归调用左子树和右子树的解来解决。

递归算法的优缺点

递归算法的优缺点

递归算法的优缺点递归算法是一种使用自身定义的函数来解决问题的方法。

递归算法的优点包括简洁、直观,能够将问题转化为较小的相同问题进行解决。

然而,递归算法也存在一些缺点,包括效率低下、可能引发栈溢出等问题。

首先,递归算法的优点是简洁、直观。

递归算法通常能够将原始问题转化为较小的子问题,然后通过调用自身函数来解决这些子问题。

这种简洁的方式使得算法的实现更加直观和易于理解。

相比于迭代算法,递归算法往往具有更少的代码量,使得代码更加简洁优雅。

其次,递归算法能够提供一种自顶向下的问题解决方式。

递归算法可以将复杂的问题分解为更小的子问题,然后逐步解决这些子问题,在子问题解决完成后再进行逐步合并,最终得到原始问题的解。

这种自顶向下的思维方式使得问题的解决过程更加直观、易于理解。

此外,递归算法还具有形式上的优点。

递归算法在问题的定义上使用了自身函数的调用,使得代码的结构更加紧凑和简洁。

递归算法的代码常常能够简洁地反映问题的本质,使得代码更加易于维护和扩展。

然而,递归算法也存在一些缺点。

首先,递归算法的效率往往较低。

递归算法在解决问题时需要频繁地调用自身函数,而函数调用涉及到压栈和出栈的过程,会带来额外的开销。

在一些情况下,递归算法的效率可能远远低于迭代算法。

其次,递归算法容易引发栈溢出的问题。

每次递归调用函数时,系统都需要为该函数分配一定的栈空间。

如果递归调用的层数过多,就会导致栈空间不足,从而引发栈溢出的问题。

为了避免栈溢出,需要限制递归调用的深度,或者使用尾递归优化等技术手段。

此外,递归算法的实现往往需要额外的空间开销。

每次递归调用函数时,都需要保存函数的局部变量、参数值等信息,以便后续的出栈和恢复操作。

这些额外的空间开销会占用较多的内存,特别是在递归调用的次数较多时。

最后,递归算法可能出现递归陷阱的问题。

递归陷阱是指当递归算法的终止条件不满足时,递归调用会一直持续下去,导致程序无法正常终止。

为了避免递归陷阱,必须正确地设计和实现递归算法的终止条件,以确保程序能够正常结束。

语言的递归性及其根源

语言的递归性及其根源钱冠连(广东外语外贸大学外国语言学及应用语言学研究中心,广州510420)摘要:(1)递归性不仅是转换生成语法中的一种语法属性,而且它与任意性、线性一样是语言的根本性质之一。

(2)作者给出了语言递归性的定义:语言结构层次和言语生成中相同结构成分的重复或相套。

(3)作者着重论证了语言递归性,阐述了整个语言结构和言语的生成处于相同结构的重复与层层相套之中,分析了语言整体上的递归性与局部上的非递归性,并指出这二者的必要性:整体上的递归性避免了句式集合的庞大与复杂的危险,使句式有限而简单;局部的非递归性使语言在有限手段之内变得丰富起来。

语言递归性的巨大意义甚至是全部意义就在于允许人们用少量的句型生成无限多的句子。

(4)语言的递归性的根源在世界(宇宙)的递归结构与语言的递归结构处于全息状态之中。

关键词:递归;语言递归性;全息On Recursiveness of Language and Its OriginQIAN Guanlian(Center for Linguistics,Guangdong University of Foreign Studies,Guangzhou 510420)Abstract: In Part 1, the author points out that, recursiveness of language should not only be a grammatical attribute restricted to the transformational -generative grammar, but also be an essential property of language on a par with arbitrariness and linear nature of language. In Part 2, the author proposes that recursiveness of language could be defined as the reiteration or the embedded state of the same frames and elements in the structures of language as well as in the process of utterance generation. Part 3 is to give the argumentation on recursiveness of language. The gigantic significance of recursiveness of language lies in that it allows people to generate infinitely many sentences with a small number of sentence patterns. Finally, the author argues that the rootstock of recursiveness of language be that the recursive structure of the cosmos and the recursive structure of language are in a holographic state.Key words: recursion; recursiveness of language; holographics本文明确地将语言的递归性(recursiveness) ,像语言的任意性与线性一样,作为语言的根本性质之一来对待,然后着重论述,语言递归性的根源来自它的结构与宇宙的结构是全息关系。

汇编实验的原理

汇编实验的原理汇编语言是一种机器语言的抽象表示,它是一种低级语言,用于告诉计算机如何执行特定的指令。

在计算机科学和工程中,汇编语言通常被用来编写低级程序,这些程序能够直接操作计算机的硬件。

汇编实验的原理可以分为以下几个方面:1. 汇编语言的基本原理:汇编语言是一种符号表示的机器语言,它使用简单的符号和指令来表示特定的操作。

这些符号和指令可以被翻译成机器语言,然后由计算机执行。

对于不同的CPU,汇编语言的指令集不同,需要根据具体的CPU 架构来编写不同的汇编程序。

2. 汇编语言的指令集:汇编语言的指令集包括数据传送指令、算术运算指令、逻辑运算指令、控制转移指令等。

这些指令可以对计算机中的寄存器、内存、I/O 设备等进行操作,实现各种功能。

3. 汇编语言的编程方法:汇编语言的编程方法通常包括两种:基于寄存器的编程和基于内存的编程。

基于寄存器的编程主要是以寄存器为中心,直接对寄存器进行操作;基于内存的编程主要是以内存为中心,需要通过地址来操作内存单元。

4. 汇编语言的程序设计:汇编语言可以用于编写各种程序,包括操作系统、驱动程序、嵌入式系统等。

通过汇编语言,程序员可以更加精细地控制计算机的硬件,实现高效的程序设计和优化。

汇编实验通常包括以下内容:1. 汇编语言的基本语法和指令集:学习汇编语言的第一步是了解其基本语法和指令集。

在实验中,学生需要学习如何使用汇编语言的各种指令来进行数据操作、算术运算、逻辑运算等。

2. 汇编语言的程序设计:学生需要学习如何使用汇编语言来编写程序。

在实验中,他们可以编写一些简单的程序,例如实现加减乘除运算、排序算法等。

3. 汇编语言的调试和优化:学生需要学习如何调试和优化汇编语言程序。

在实验中,他们可以使用调试工具来检查程序的执行过程,分析程序的性能,并对程序进行优化。

4. 汇编语言的应用实例:学生可以学习一些实际的应用实例,如操作系统内核、设备驱动程序等。

在实验中,他们可以尝试编写一些简单的应用程序,了解汇编语言在实际应用中的使用。

递归实验报告分析总结

递归实验报告分析总结递归是一种非常重要的编程思想和技巧,对于理解和解决问题具有非常大的帮助。

通过递归,我们可以将一个问题分解成为更小的子问题,从而简化问题的复杂度和难度。

在本次实验中,我深入学习了递归的原理和应用,并实践了一些递归算法。

通过这些实验,我对递归有了更深入和全面的理解,掌握了递归的使用方法和注意事项。

在实验中,我首先学习了递归的概念和原理。

递归是一种将大问题分解成小问题的算法思想,通过不断调用自己来解决问题。

递归算法通常包含两个部分:基本情况和递归情况。

基本情况是递归终止的条件,递归情况是递归调用自身的条件。

通过合理设置这两个条件,我们可以确保递归算法能够得到正确的结果并正常终止。

然后,我练习了递归的应用。

在实验中,我实现了一些常见的递归算法,如计算阶乘、斐波那契数列等。

通过这些实践,我更加熟悉了递归的写法和思维模式。

递归算法的核心思想是将大问题分解成小问题,然后通过递归调用解决这些小问题,最终得到整个问题的解。

这种思维模式非常灵活和高效,对于解决一些复杂和抽象的问题非常有帮助。

在实验过程中,我也遇到了一些递归算法的常见问题和注意事项。

例如,递归算法容易出现堆栈溢出的问题,因为每次递归调用都会占用一定的内存空间,如果递归层数过多,就容易导致栈溢出。

为了解决这个问题,我们可以在递归算法中加入递归深度的限制条件,或者考虑使用迭代算法等其他算法思想。

此外,递归算法的时间复杂度一般比较高,因为递归算法需要不断的调用自身,导致函数的调用次数非常多。

为了提高递归算法的效率,我们可以尝试使用尾递归优化、记忆化搜索等技巧。

尾递归优化是指在递归函数的最后一步调用中,直接返回递归函数的结果,而不再进行其他操作。

这样可以有效避免函数调用的堆栈积累,提高程序的性能。

总的来说,通过本次递归实验,我对递归算法有了更深入的理解和掌握。

递归是一种非常强大和灵活的算法思想,可以用来解决各种复杂的问题。

通过合理设置递归的基本情况和递归情况,我们可以通过递归算法简化问题的复杂度和难度,高效地解决问题。

如何处理代码中的无限递归问题

如何处理代码中的无限递归问题无限递归是指在程序中出现了不停地调用自身的情况,这样会导致程序陷入无限循环,最终导致程序崩溃。

这种问题通常会导致程序的性能下降和内存占用增加,甚至可能会导致整个系统崩溃。

因此,如何处理代码中的无限递归问题是程序开发中非常重要的一环。

在本文中,我们将探讨无限递归问题的产生原因、如何检测无限递归以及如何解决无限递归的方法。

一、无限递归问题的产生原因无限递归问题通常是由于程序中存在着逻辑错误或者编程错误所导致的。

比如,在编写递归函数时,忘记了设置递归的退出条件,导致递归无法正常结束。

又比如,在递归函数中调用了一个永远返回true的条件语句,导致递归无法退出。

此外,无限递归问题还可能是由于栈溢出所导致的,当递归层数过深时,栈空间会被耗尽,从而引发程序崩溃。

二、如何检测无限递归在编写代码时,我们需要时刻关注可能存在的无限递归问题。

在检测无限递归时,可以使用递归深度和递归次数这两种方法来进行检测。

递归深度是指递归函数的嵌套层数,当递归深度过深时,可能会出现无限递归的情况。

递归次数是指递归函数的调用次数,当递归次数过多时,也可能会出现无限递归的情况。

此外,还可以使用调试工具或者代码审查的方式来检测无限递归。

三、如何解决无限递归问题解决无限递归问题的方法有很多种,可以根据具体的情况选择合适的方法。

下面我们将介绍几种常见的解决无限递归问题的方法:1.设置递归结束条件在编写递归函数时,一定要记得设置递归结束条件,确保递归能够正常结束。

递归结束条件通常要考虑到递归函数的输入参数以及递归深度,确保递归结束条件能够覆盖所有可能的情况。

2.优化递归算法在编写递归函数时,要尽量避免不必要的递归调用,尽量优化递归算法,减少递归深度和递归次数。

可以考虑使用循环代替递归,或者使用尾递归优化来减少递归的开销。

3.使用辅助变量在递归函数中,可以使用辅助变量来记录递归的状态,以便在递归结束时能够正确返回结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用汇 编语言剖 析递归算法 的 内在机 理
火善栋 杨 旭东 2
(. 1 重庆三峡 学院,重庆 万州 4 4 0 ) 1 0 0 0
(. 2 重庆安全技术职业 学院,重庆 万 州 44 0 ) 0 0 0

要: 汇编语 言是 一 门面向计算机 硬件 的符 号化的机 器语 言,通过对 汇编语 言的学 习可 以
堆栈还没有完全 清空, 里面还保 留着 传入参数 的值 , 所 以本实例通过 P PC O X这 一指令来实现了清栈工 作( 这一情况会随传入参数个数的不同而有不 同) . 总之 ,函数在执行调用之后 ,堆栈完全恢复 为 调用前 的最初始状态 ,只是结果保存在 A 寄存器 X 中,进而 实现 了函数调用的透 明性 . 笔者认 为,理解递归调用 的一个重要难点就 是 要搞清 楚在递归调用 内部是如何进行参数传递的,
通过 以上分 析, 以得 出“ 可 斐波那 契( ioac) Fbn ci
同时,递归算法 内存的消耗也主要是用在堆栈的花 销上 ,但堆栈对 内存的 占用是一个不断变化 的动态 过程,因此 ,其最大 占用 内存是 由递归调用的最深
层次决定的.
就对递归算法 的理解而言,我们可 以将其视为

1 实 例 分 析
本文通 过一个 很简单的递归算法 的例子 “ 斐波那契 ( io ac)数列 ”来 具体 剖析递 归算法 的 内在运 Fb nci
行机理 ,从 而加深对 递归算法的理解 ,进而帮助读者更好地用好递 归算法 . 【 问题 】编 写计算斐波那契 ( io ac)数列的第 n项函数 f ( ). Fb nci i n b
2 2年 第 3期 01
重 庆三 峡学院 掌报
No 32 2 . .01
第2 8卷 ( 1 9期 ) 3
J U NA FC O Q NGT E O G SU V R IY O R LO H NG I HR EG R E NI E ST
V_ . 8No 1 9 0 2 .3 1
0 引 言
递归算 法是计 算机领域 中一个很重要 的算法 ,通过递 归算法 可以使很复杂的 问题变得很容易解决 ,例 如著 名的汉 诺塔 问题 ,假若不采用递归算法 的话可 能无法解 决,还有 数据结构中树和图的遍历 ,通过采用 递 归算法从 而使 问题变得 非常容易 ,当然递归算法在很 多地方也有着很广泛 的应用 . 递 归算法 虽然 编写起 来 比较容易 ,但在对递归算法 的理解上 ,很 多人却 感到很抽象 ,在学习过程中往 往对这类 问题 的执 行过程 不 了解 ,对递归 问题 的认识不清楚 ,所 以难 以写出正确 的递归程序 ,另外,在对 递 归算法 的执行 效率 以及 空间复杂度上很多人更是感到难 以理解 .这其 中一个很 重要的原因就是对递归算 法 的内在机 理没有 搞清楚,对递归算法 中函数如何反复调用 以及参数 如何进 行传递 没有理解透彻 . 由于高级语 言把程序运行的 内部细节都透 明化 了,所 以想通过 高级语 言理解递 归算法 的 内在 运行机理 是不 可能的,但汇 编语言是一 门低级语言 ,其实质也是机器语 言一对 一的符 号化,是指令 级的语言 ,虽然 通过 汇编语 言编写程序代码费时费力 ,但通过汇编语言可 以看 出程序运行 的每一个 细节.因此,这对理解 递 归算法无 疑是一个很好的工具 .
行进栈和出栈操作 ,所 以执行效率相对要低 一些 ;
以及返 回值是如何保存的.通过对 以上反汇编代码
的分析可以看 出,A 寄存器起到 了一个 很重要 的 X 作用,以 A X寄存器作为桥梁 ,不断地和堆栈交换 数据,不 断地将 中间结果保存在 A X寄存器中,从 而很轻松地实现 了参数 的传递和 结果 的保存 .
斐波那 契数列 为:0 、1 、3 m Q 、1 、2 、 i ,即: Q O O
i O- ; f ( )O b i 1=l f () ; b
i n = (・) f (- ) f ( )fbn 1+ bn2 b i i
收稿 日期 :2 1- 2 2 02 0- 3Biblioteka ( n l时 ) 当 >
数列 ”递 归算法 ( = )的具体执行过程 ,如 图 2 n5
所示 :
个树形结构 , 当递归 函数体中有两个递归 函数时,
其执行过程类似于 二叉树 的前序遍历 .推而广之, 当递归 函数体中有 n个递归函数 时,就相 当于这颗 树 中有 n个分枝,也就是形式上 的 “ n叉树”.
加深对 计算机 内部原理 的理解.文章借 助汇编语言低 级化的特 点,详细地 分析 了递 归算法的 内在
运行机理. 关键词 :汇编语 言;递 归算法;堆栈
中图分类号:T 3 P 1 3 文献标识码 :A 文 章编号 :1 0— 1 5( 0 2 3 0 5— 4 0 9 8 2 1 )0— 0 1 0 3
参考文献 : [] 1谭丈等. 书夜读:从 汇编语言到 W n o s 内核 天 id w
作者简介 :火善栋 ( 94 ) 17- ,男,湖北孝感人 ,硕 士,重庆 三峡 学院讲师 ,研究方 向:智 能信 息系统 杨 旭 东 ( 9 0 ,男,重庆 万州人 ,重庆安全技 术职业学 院教 师,研 究方向:网络安全. 1 7 一)
火 善 栋
杨 旭 东 :用 汇 编 语 言 剖 析 递 归 算 法 的 内 在 机 理
递归算 法 实质就是 一个 函数 体不 断调用 自身 的过程 ,在 调用 的过程中不断地将参数 、返回地址 以及局部变 量压入堆栈,当返 回时又将堆栈恢复到 每一次调用 前的状态 .在整个调用过程 中,始终 以
A X或 E X寄存器作为桥梁 , 断地和堆栈交换数 A 不
据 ,不断地将 中间结果保存在 A 或 E X 寄存器 x A 中, 从而顺利地实现 了参数的传递和结果的返回. 另 外 ,递归函数在执行递归调用 的过程 ,要不断地执
相关文档
最新文档