跳转到内容

编程基础/递归与迭代

来自维基教科书,开放的书籍,开放的世界

介绍递归,并使用循环作为重复算法解决方案的替代方法。包括用于计算阶乘的 C++ 编程代码。

重复算法

[编辑 | 编辑源代码]

"一般来说,编写重复算法有两种方法。一种使用循环;另一种使用递归。递归是一种重复过程,其中一个函数调用自身。两种方法都提供重复性,并且可以互相转换。"[1] 迭代是控制结构的类别之一。它允许零到多次处理某些操作。迭代也被称为循环和重复。数学术语“迭代”是指执行循环语句部分。许多问题/任务需要使用重复算法。在大多数编程语言中,这可以通过以下两种方式实现:

  1. 循环控制结构,特别是 for 循环(迭代方法)
  2. 递归调用函数

在许多数学相关的問題中,重复算法作为解决方案方法出现。包括阶乘、斐波那契数列和汉诺塔问题。这些问题的解决方案通常只以递归方法的形式呈现。然而,“... 您应该了解递归的两个主要限制。首先,递归解决方案可能涉及大量开销,因为它们使用函数调用。其次,每次调用都会消耗一些内存分配。如果递归很深 - 也就是说,如果存在大量递归调用 - 那么您可能会耗尽内存。阶乘和斐波那契数列的解决方案都最好用迭代的方式来开发。"[2]

了解递归或迭代方法的工作原理将留给其他人。它们通常作为数据结构学习的一部分被详细介绍。我们介绍它们的目的是

  1. 为您提供递归的定义
  2. 介绍迭代的替代解决方案方法

以下示例程序展示了 8! (八阶乘)的两种解决方案。

C++ 示例程序

[编辑 | 编辑源代码]

创建源代码文件的文件夹或子文件夹

[编辑 | 编辑源代码]

根据您的编译器/IDE,您应该决定在哪里下载和存储源代码文件以进行处理。谨慎起见,您应该在下载源代码文件之前根据需要创建这些文件夹。Bloodshed Dev-C++ 5 编译器/IDE 的建议子文件夹名称为:

  • Demo_Programs

如果您还没有这样做,请根据需要创建文件夹和/或子文件夹。

下载示例程序

[编辑 | 编辑源代码]

将以下文件下载到您的存储设备中的相应文件夹中。按照您的编译器/IDE 的方法,编译并运行程序。结合其他学习资料学习源代码文件。

从 Connexions 下载:Demo_Factorial.cpp

递归
一个重复的过程,其中一个函数调用自身。
阶乘
一个经常使用递归解决的数学问题。

参考资料

[编辑 | 编辑源代码]
  1. Behrouz A. Forouzan 和 Richard F. Gilberg,Computer Science A Structured Approach using C++ 第二版 (美国:Thompson – Brooks/Cole,2004) 265。
  2. Behrouz A. Forouzan 和 Richard F. Gilberg,Computer Science A Structured Approach using C++ 第二版 (美国:Thompson – Brooks/Cole,2004) 272。
华夏公益教科书