自己面试中遇到的for循环问题

来源:互联网 发布:php array to json 编辑:程序博客网 时间:2024/05/16 05:47
   最近面试时,面试官问我的一个问题,如下:
            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),这样将省去读取内存的时间和两变量相减的时间。
   还望有牛人指教。