• 请简述以下两个for 循环的优缺点


    今天笔试时候遇到一个问题,找到相似的。

    for (i=0; i<N; i++)
    {
        if (condition)
            DoSomething();
        else
            DoOtherthing();
    }
    if (condition) { for (i=0; i<N; i++) DoSomething(); } else { for (i=0; i<N; i++) DoOtherthing(); }

    优点:程序简洁

    缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

    优点:循环的效率高

    缺点:程序不简洁

    看到网络上还有一种回答: 

    前者:
    优点:程序简洁
    条件判断出现在For里面,意味着,即使我在dosomething()或dootherthing()这2个函数中改变了condition的值,For循环也能正确执行我的意图,因为它在每次循环中都会重新检测conditon的值并针对condition的值做不同动作,所谓以不变应万变,这是难能可贵的.   
    缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
    如果condition一直未曾改变,我们可怜的if必须每次循环都判断一下condition的真假.牺牲了运行时效率.

    后者:
    优点:循环的效率高。只进行一次判断,运行时效率高.适合那种condition的值不会改变的情况.
    缺点:由于只在一开始进行一次判断,所以失去的改变condition的值的机会,也就是说,即使我在dosomething()中改变了condition的值为false,这个程序也不会改变它的判断,它依然执行着dosomething()的循环.我们不能随时更换我们需要进行的动作。这是牺牲了弹性。

    N较大时,建议采用后面这种写法,由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

  • 相关阅读:
    layUI--实现分页
    maven项目-----Dynamic Web Module 3.0 requires Java 1.6 or newer
    js---open打开新窗口
    hibernate常见问题?
    eclipse如何修改dynamic web module version
    设计模式之五种创建型模式学习笔记
    设计模式学习笔记
    数据定义语言(DDL Data Definition Language)基础学习笔记
    idea安装成功后,设置字体、快捷键、配置jdk等操作
    基于Redis实现分布式锁
  • 原文地址:https://www.cnblogs.com/jason-linux/p/10603471.html
Copyright © 2020-2023  润新知