CSDN博客

img Supercaller

关于判断循环次数的错觉

发表于2008/9/28 20:06:00  504人阅读

          当我们执意想通过循环来删除列表中所有项,例如:

          列表L,列表中的元素的个数也做长度length;

          有些人或许会想到如想方法:

           for(i=0;i<L.length;i++)          

           {

           dlelete  L[0];

           }

          乍看起来,似乎“循环执行的次数等于列表元素的个数,也就说我们每次都删除第一项元素,而且我们执行了所需的次数”,因此应该可以实现删除全部列表元素的功能,但是运行后才发现:总会有剩余元素;

          不妨仔细想一想,上面的删除语句确实执行了L.length次吗? 结果证明没有,那么为什么呢?

          其实就是因为一般的循环中,只有i在变化,而决定循环的次数的量(这里是L.length)是不能变的,正因如此,本题中L.length每执行一次都会相应的减1,与此同时i也照常增加1,显然这样的结果是循环的次数减少了.也就造成了上述问题.

          部分老师,讲解该问题时:帮学生想到一个办法:

          int  N=L.length;

         for(i=0;i<N;i++)

           {

           delete L[0];

           }

          显然,这样能够实现删除全部列表元素的功能. 这也非常容易理解.

          不过,只要理解了,上述观点,我们不难想出另外一个办法:

          for(i=0;i<L.length;i=0)

          {

           delete L[0];

          }

          看起来,实现的方法好像很不同,其实利用了同一个道理:决定循环次数的i和i的终止值间只能有一个变化,循环的次数才能达到预期……

         

         

          

        

0 0

相关博文

我的热门文章

img
取 消
img