【问题标题】:What is the difference between an iteration and a loop?迭代和循环有什么区别?
【发布时间】:2020-11-01 20:40:50
【问题描述】:

我正在在线学习 Cs50 哈佛大学,现在是第 3 周,但在观看视频时,我注意到迭代和循环似乎相同,因为它们一遍又一遍地重复。但必须有区别,否则他们不会为同一件事有两个名字。无论我重新观看视频多少次,我都找不到差异。请帮我理解。

【问题讨论】:

  • 迭代的意思是“重复”。循环是重复事物的一种结构,但还有其他结构。通常它们是相同的。
  • 循环是一种允许多次执行某些代码的语言结构。迭代是这段代码的实际执行。
  • 无论我重新观看视频多少次,我都无法找到差异。” - 可能会改变知识来源。视频可能没有那么高质量。

标签: c loops iteration cs50


【解决方案1】:

“循环”是指用于重复执行某些代码的语言结构。 (for 循环、while 循环等)

“循环”也可以指重复执行的代码。 (例如“它陷入了一个循环。”)

迭代是重复做某事的过程。 (例如“这个循环遍历数组的元素。”)

迭代是循环的单遍。 (例如,“在 for 循环的第一次迭代中,i 将是 0。”)

【讨论】:

  • 我个人会说循环的第一次执行不是第一次迭代。第一次迭代是第一次重复发生的时候。如果您在某种术语基础上进行比较,“迭代”这个词就等于“重复”。
  • @RobertS 支持 Monica Cellio,但这不是它在 CS 中的使用方式。我们说“每次迭代”,其中包括第一次。
  • 只是因为通常习惯这样说(也许是为了特定用途的简单起见),并不意味着它是严格正确的。一个iteration就是一个repetition,如果你查字典的话。
  • 我不认为包含一个不常见的术语定义是合适的。 /// 我发布的定义是 CS 定义。不是英语的。请注意,Loop (Computer) on Wikiedia 中“迭代”的每一次使用都指的是循环传递。
  • 在我看来,停止使用不正确的术语更合适。如果您愿意,可以争论第 0 次迭代,但第一次迭代就是第一次重复。
【解决方案2】:

通常“循环”是指代码,“迭代”是指重复某些步骤的概念过程。在这种情况下,它们或多或少是相同的。此外,您可以使用“迭代”来指代循环中的单个重复,从而赋予它不同的含义。

第一次使用“迭代”的例子是:

您可以使用 迭代 或递归来打印链接列表。如果您使用迭代,只需创建一个 while-循环,它通过列表传播“当前”节点并在它变为 NULL 时停止。

还有一个提到具体重复的例子:

以下循环以相反的顺序输出数字 1 到 10。在k-th 迭代,打印10-k+1

for (i=10; i>=1; i--){
    printf("%d\n", i);
}

【讨论】:

    【解决方案3】:

    这就是我的定义:

    "Loop" - 一个控制流语句,根据提供的循环条件迭代循环体中的代码。它是一种语言结构,在 C 中我们有三种结构:forwhiledo-while

    "迭代" - 在第一次演练之后循环体内的代码的一个特定演练。换句话说,循环体代码执行的单次重复。

    在进行循环/迭代时(作为动词,它们确实可以被视为相等),您重复循环体中的代码。每一次重复都是一次迭代

    循环的目的是能够进行迭代。如果不能进行迭代,循环结构是无用的。

    因此,这两个术语密切相关,但并不相同。

    【讨论】:

    • 反对票是基于这样一个前提,即人们认为我在 repetition 的意义上对 iteration 的定义是不正确的。我会说他们将不重复称为迭代并说我错了是不正确的。如果您查看字典,则迭代就是重复。如果有人可以给我任何官方标准的证据,证明“迭代”并不意味着“重复”并且与其一般含义相反,我会改变我的答案。否则我不认为这个定义是错误的,我只能希望你也不要这样做。随时欢迎建设性反馈。
    • C 2018 脚注 161:“控制表达式……指定在每次迭代之前进行的评估……而表达式 3 指定操作……在每次迭代之后执行。” Java 语言规范 SE 11:“接下来 [在初始化 for 语句之后],将执行 for 迭代步骤……”Uses of “first iteration” on Stack Overflow. 不要将通用语言词典用于计算机科学术语。技术术语可能源自通用语言,但具有不同的含义。
    【解决方案4】:

    代码中的循环是三件事的组合。

    1. 条件或休息时间。 (它不会自行停止)
    2. 循环参数,索引
    3. 可重复的待办事项列表

    比你谈论迭代。 一次迭代只是循环的 1 个实例。 所以你第一次循环是在你身上运行你的 0 实例/迭代。 您的索引几乎每次都引用您的实例/迭代。

    https://codingbat.com/doc/java-for-while-loops.html

    https://www.programiz.com/c-programming/c-for-loop

    而且迭代不是基于条件而是基于事件。

    希望我回答了您的问题,如果需要更多信息,请回复。

    【讨论】:

    • 我不同意将迭代定义为循环的一个实例。 foreach() 是一个快速迭代命令。所以这与实例无关
    • 循环不需要有第 2 点所述的索引。
    • (从技术上讲,循环也不需要条件。例如,在 Perl 中,一个模块添加loop { ... },这是一个循环仅退出,除非last (=break) , return 或异常。例如,在 Perl 中,{ ... } 是一个循环,除非使用 redo,否则只会执行一次。它通常用于范围界定。)
    猜你喜欢
    • 2013-11-18
    • 2017-06-29
    • 2013-04-26
    • 2013-11-16
    • 1970-01-01
    • 2011-04-01
    • 2023-03-09
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多