笔试题:简述以下两个for循环的优缺点

LoveBoydan 2010-07-14 08:08:28
请简述以下两个for循环的优缺点
// 第一个
for (i=0; i++;)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
// 第二个

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

优点:
缺点:
优点:
缺点:
...全文
1095 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
helisong427 2012-08-16
  • 打赏
  • 举报
回复
我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~
helisong427 2012-08-16
  • 打赏
  • 举报
回复
我今天去面试也做了这个题,以前没有遇到过,我考虑到在多线程情况下,condition会变化,那么第二种就有问题了,后面我又想到,如果在DoSomething里面改变了condition变量,就是希望下次执行DoOtherthing,第二种情况逻辑也是错误的。面试官直接给0分。
面试官应该不是搞技术的,其他题目就不说了,都是很教条式的考题,看了试题就叫我回去了。伤不起哦~~
EdwardLu_ 2010-10-23
  • 打赏
  • 举报
回复
多执行了个循环?!
黑泡泡选手 2010-08-02
  • 打赏
  • 举报
回复
面试题总是从上面挖过来!
herman~~ 2010-08-02
  • 打赏
  • 举报
回复
感觉像是面试题
Csuxiaowu 2010-08-02
  • 打赏
  • 举报
回复
学习了 学习了
cauyus 2010-08-02
  • 打赏
  • 举报
回复
没看过林锐的书。。。觉得这个问题挺那个的。

2段代码,实现不同的功能。。能说代码简洁。。







偶是江湖中人 2010-07-15
  • 打赏
  • 举报
回复
《高质量c++/c程序设计》
luocw110 2010-07-15
  • 打赏
  • 举报
回复
见解不错
xushuai0794 2010-07-15
  • 打赏
  • 举报
回复
其实这个就是循环内层和外层的大小的问题,C/C++编程规范里面的
zhengweihit 2010-07-15
  • 打赏
  • 举报
回复
知道一点编译优化的就知道了,效率上确实是第2种高。循环中代码外提可以提高编译器对循环的流水线处理,参考编译原理界的“龙书”。
fengqiao1999 2010-07-15
  • 打赏
  • 举报
回复
第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。
linsen_519 2010-07-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tu_lq 的回复:]

以下是林锐的原文:
for (i=0; i<N; i++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
if (condition)
{
for (i=0; i<N;……
[/Quote]
林锐其实是SB,他误导了多少新手。所以这道题出自他的手也不足为奇,稍微懂一点C++的人都能看的出,这两个逻辑有天壤之别!有可比性吗? 我拿一个视频算法和一个状态机谁去给我比比看?
zsdl1288 2010-07-15
  • 打赏
  • 举报
回复
一个是在for循环加入判断语句 使得循环不连续 增大运行时间
另一个是在判断后执行for循环 虽然没有打断循环连续 但代码增加
如果是同样的逻辑的话 建议不在for循环中加判断
Mg 2010-07-15
  • 打赏
  • 举报
回复
很常见的一个比较~
@肖凌 2010-07-15
  • 打赏
  • 举报
回复
高质量程序设计指南——C++/C语言》word版本,后面的习题,主要从编译的角度来说明
Q446512799 2010-07-15
  • 打赏
  • 举报
回复
1.效率低但程序简洁
2.效率高但程序不简洁

1的程序比2多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用2的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用1的写法比较好,因为程序更加简洁。
走好每一步 2010-07-15
  • 打赏
  • 举报
回复
逻辑一样的话,效率其实也差不了太远。不过更喜欢后一种。
yshuise 2010-07-15
  • 打赏
  • 举报
回复
现代编译器对for循环的优化,都不需要关注它了。我想。
YukiCEO 2010-07-15
  • 打赏
  • 举报
回复
只是写了伪代码,两个程序完成的功能其实是一样的

第一个,代码清析,容易理解,缺点是每一次循环里都有比较,增加了程序空间复杂度;

第二个,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。


自己写程序时可做一个比较,如果你确知循环的上限在较少范围内,这种差异可以忽略不计时,可选择第一种易于阅读的,但如果循环上限未知的,或是循环上限比较大的,应该选择第二种
加载更多回复(25)

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧