自己面试中遇到的for循环问题
2013-05-11 10:20
316 查看
最近面试时,面试官问我的一个问题,如下:
for(i=0; i<n; i++)
和
for(i=n; i>0; i--)
“这两个for循环,哪个的速度更快?为什么?”
我的答案是:后者更快。原因是for语句括号中的三个部分中,第二个部分是进行判断的,每循环一次都要进行判断,根据判断的结果决定是否继续进行下一次循环。
前者的判断为i<n是将i和n这两个变量进行比较,计算机为了比较这两个变量的值需要内存中读取n的值,再放入寄存器中,然后再与i相减,最后判断结果是不是0,如果不是0,则继续循环,否则,则退出循环。
而后者是将i和0进行比较,任何一个CPU都有一个与0比较的指令,编译器将会使用这条指令(一般为JZ或JNZ),这样将省去读取内存的时间和两变量相减的时间。
还望有牛人指教。
for(i=0; i<n; i++)
和
for(i=n; i>0; i--)
“这两个for循环,哪个的速度更快?为什么?”
我的答案是:后者更快。原因是for语句括号中的三个部分中,第二个部分是进行判断的,每循环一次都要进行判断,根据判断的结果决定是否继续进行下一次循环。
前者的判断为i<n是将i和n这两个变量进行比较,计算机为了比较这两个变量的值需要内存中读取n的值,再放入寄存器中,然后再与i相减,最后判断结果是不是0,如果不是0,则继续循环,否则,则退出循环。
而后者是将i和0进行比较,任何一个CPU都有一个与0比较的指令,编译器将会使用这条指令(一般为JZ或JNZ),这样将省去读取内存的时间和两变量相减的时间。
还望有牛人指教。
相关文章推荐
- js初学者常遇到的一个for循环中onclick问题
- 9*9乘法表中for循环中遇到的一点问题
- 关于for()循环使用过程中遇到的问题(俄罗斯方块游戏中遇到的问题)
- for循环里嵌套使用ajax遇到的问题
- ios 平时自己面试遇到的一些问题
- 9*9乘法表中for循环中遇到的一点问题
- javascript学习中遇到的for循环次数问题。
- 遇到一个很有趣的问题,while(ture)或者for循环出现异常,继续执行还是跳出异常
- 整理一些自己的面试中遇到的问题,不定期更新。
- JAVA自己面试遇到的问题
- for循环中进行Promise异步操作的问题总结
- 面试中遇到的问题
- Android 开发过程中遇到的问题Error:Execution failed for task ':app:processDebugManifest'
- 解决Niosii下载FLASH遇到的问题No EPCS layout data --- looking for section [EPCS-xxxxx]
- Java中循环问题:for,while,do-while 各种练习(打印上三角、下三角、输出100以内的素数、水仙花、最大公约、最小公倍数、分解质因数、兔子问题)
- 遇到的面试问题总结
- 上海面试经常遇到的事务安全问题
- 面试所遇到的问题(1)
- 【总结】关于自己装Ubuntu以来遇到的所有问题及其解决方法