代码之家  ›  专栏  ›  技术社区  ›  user405398

为循环嵌套?

  •  1
  • user405398  · 技术社区  · 15 年前

    我是一个计算机科学的学生。但我没怎么编码。因为循环对我来说很简单,如果它是嵌套的循环,我的头开始旋转。

    告诉我如何掌握嵌套for循环。我应该从哪里开始练习?

    有一次,我的班主任告诉我们,任何使用更少for循环的应用程序都是最有效的。是真的吗?

    给我提个建议 book paper on for loops links !!

    deceze : How about you give us an example nested loop and tell us what you don't understand about it?

    我无法完全解释。每当我开始考虑一个需要2个for循环(嵌套)的函数时,firts的两次迭代都是平滑的。在那之后,如果我在内部循环中添加任何其他计算,一秒钟后它就全部消失了。我不能继续。所以,我必须在PC中运行更小的循环,然后将其构建为一个完全功能的循环。

    好吧,离开我。 What you all do, i mean, how you start if you have to build a function which needs more than 2 nested for loops.

    4 回复  |  直到 9 年前
        1
  •  5
  •   irrelephant    15 年前

    Suggest me any book or paper on for loops or links!!

    为了巩固你对2 for循环的理解,你可以尝试在 http://www.codingbat.com/java -此外,还有即时和(大部分)彻底的评分! String-3或Array-3问题可以使用2作为循环。

    如果有一个二维数组,并且需要达到所有索引,那么可以使用2作为循环。因此,类似地,如果您有一个3D数组,您可以使用3个嵌套循环。请记住,循环的内部在外部之前结束——所以如果有两个循环,内部代码将循环内部循环指定的时间,循环外部循环指定的次数。你可以画一个图表:

    for(int i = 0; i < 2; i++) {
      for(int j = 0; j < 2; j++) {
        for(int k = 0; k < 2; k++) {
          //do something
        }
      }
    }
    

    视觉表现:

    i:      0-----------1
            |           |
    j:   0-----1     0-----1
         |     |     |     |
    k: 0---1 0---1 0---1 0---1
    

    如果我分配信件:

    i:      A-----------B
            |           |
    j:   C-----D     E-----F
         |     |     |     |
    k: G---H I---J K---L M---N
    

    X1是X的第一部分(嵌套for循环之前),X2是第二部分(嵌套for循环之后),执行顺序为:

    A1、C1、G、H、C2、D1、I、J、D2、A2、B1、E1、K、L、E2、F1、M、N、F2、B2

    所以在寻找循环时,不需要描绘n维数组。

    有一次,我的班主任告诉我们,任何使用更少for循环的应用程序都是最有效的。是真的吗?

    如果您的for循环涉及计算一个类似于公式的值,那么将东西插入到公式中可能会更快、更高效。但一般来说,最慢的大O算法对程序的效率影响最大,因此独立for循环依赖于 n (作为其停止条件)如果一个程序还嵌套了依赖于 n个 .

        2
  •  1
  •   user166390user166390    15 年前

    有一次,我的班主任告诉我们,任何使用更少for循环的应用程序都是最有效的。是真的吗?

    当然不是。

    但是,使用嵌套循环的算法 可以 O(n1 * n2 * n3 ...) --最终会像 O(n^c) 或者更糟(想象一下一种简单的方法来确定一个数组是否与另一个数组具有所有相同的元素,但顺序是-- O(n^2) ). 这个 并不意味着是 需要一个更具体的案例来为一个或另一个案例辩护。在某种形式下,循环(不管它们如何隐藏)是命令式编程(甚至包括大多数函数式语言)的一个组成部分。

        3
  •  1
  •   Camilo Martin    15 年前

    (我希望我已经很好地理解了这个问题)

    您将看到,当您获得这些嵌套循环所表示的基本思想并正确缩进时,它们非常简单。

    它们是从语义上表示序列的一种方法。

    例如,这:

    for (i = 1; i <= 5; i++)
    {
        document.write("The number is " + i + "<br />"); 
        //(The "<br />" above is an HTML newline, this is in javascript)
    }
    

    与此相同:

    document.write("The number is 1" + "<br />");
    document.write("The number is 2" + "<br />");
    document.write("The number is 3" + "<br />");
    document.write("The number is 4" + "<br />");
    document.write("The number is 5" + "<br />");
    

    但前者更清楚自己在做什么。它也尊重 DRY principle (也就是说,复制粘贴代码是很可怕的做法)。

    现在,转到嵌套for循环。如果你想成为一个优秀的程序员,你必须考虑抽象,所以把for循环看作 序列 关于行动。
    那么什么是 嵌套的 为了循环? 序列 ! :)

    例如,重复相同的重复三次:

    for (i = 1; i <= 3; i++)
    {
        for (j = 1; j <= 3; j++)
        {
            document.write(j);
        }
        document.write("<br />");
    }
    

    以及输出:

    123
    123
    123
    

    更多层次的嵌套将代表更复杂的序列。不过,一般来说,除非编写一些复杂的算法,否则不应该嵌套代码- 一种方法只能做一件事,而且要做好 .

        4
  •  1
  •   george kyaw naing    15 年前

    以摘要形式引用“代码完成” " 16.3条。从内到外轻松创建循环 你可以用一个简单的技巧第一次就搞定它。

    从一个案例开始。用文字来编码。

    然后缩进它,在它周围放置一个循环,并用循环索引或计算表达式替换文本。

    如果需要的话,在它周围再放一个循环,并替换更多的文本。只要有必要,就继续这个过程。

    完成后,添加所有必要的初始化。因为您从简单的情况开始,并向外扩展来概括它,所以您可能认为这是从内到外的编码。

    "