关于判断循环次数的错觉

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

          列表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的终止值间只能有一个变化,循环的次数才能达到预期……

         

         

          

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值