lancelei

基础知识之——递归、循环、迭代、遍历和枚举
貌似很多小伙伴还不是很清楚递归、循环、迭代、遍历和枚举这四者的概念,其实在很多时候,这四者都是很重要,也很常用的知...
扫描右侧二维码阅读全文
24
2018/10

基础知识之——递归、循环、迭代、遍历和枚举

貌似很多小伙伴还不是很清楚递归、循环、迭代、遍历和枚举这四者的概念,其实在很多时候,这四者都是很重要,也很常用的知识。现在我来介绍一下这四者吧。

有一个故事大家小时候都听过,我们今天就以这个故事来作为例子吧。本人学疏才浅,很多语句其实值得商榷,主要是为了迁就这个故事,当然代码本身用法什么的是没有太大问题的。也请各位老司机们轻拍和指教

从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的是,从前有座山,山里有座庙······

这个故事,只要我不停,可以一直讲下去,作为例子太好不过了。

循环

现在呢,我想写一本关于这个故事的书,,如果我一直写“从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的是,从前有座山,山里有座庙······”,我一辈子都写不完,全世界的木头都用来造纸也不够,怎么办呢,既然他是规律出现的,那我就直接循环好了。

for(;;){
   out.print("从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的是");
}

大功告成,这下,我用一个语句就把无穷大的故事讲完了。当然,不设置一个终止条件是不行的,虽然理论上可以无限制的循环下去,但是计算机资源有限,这种“死循环”迟早会把资源耗尽、程序崩溃的。这个限制条件,就是循环的出口。

for(int i=0;i<100;i++){
       out.print("从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的是");
    }

好了,现在我限制了他的循环次数,妈妈再也不用担心程序崩溃了。

递归

递归是一种编程技巧,其概念就是程序(函数)自己调用自己,其实和循环是很类似的。但是,如果一旦需要大量从一个函数调用另外一个函数,代码就臃肿了,举个简单且不成熟的例子。我们先改写一下上面的代码,再加一个函数来表示章节。部分代码省略

chapter(){   
    //这里输出章节序号
}

white(){
 //这里输出这个臭屁的故事  
}

main(){
//这本书太垃圾了,我想写一百章故事
for(int i=1;i<=100;i++){
      chapter(i);
      white();
    }
}

那么,有没有更简单一点的方法呢,有的,那就是递归,我写一个函数,让它自己调用自己不久好了么。

    class Factorial {
    //递归
    int num=1;
    story(int num){        
        if(num>100){
            out.print("第"+num+"章");
        out.print("从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的是");
        }else{
            return story(num+1);
        }
    }
}

好了,这就是递归,sotry()一直在调用它自己,可读性刚刚的,代码清晰,量又少,~可谓是居家旅行,杀人放火必备良药~。现在就来说下递归的注意事项吧:

  1. 递归就是在过程或函数里面调用自身;
  2. 在使用递归时,必须有一个明确的递归结束条件,称为递归出口

在上面的例子中,我们用if来作为约束条件,创造了递归的出口,不然,这个故事就真的无限循环的讲下去了233333

迭代

怎么说呢,其实递归是迭代的特例,如果说递归是自己调用自己,那么迭代就是A调用B(一直调用)。

这样理解会不会好一点。。。递归是不断的简化问题简化问题,把原始问题变成最简单的方式,然后再用简单的方式推回原始的的问题。迭代呢,就是从1推2,2推3···推到100,是一个不断从旧值推新值的过程。

代码不想写了,就这样把。

遍历

天哪,别告诉我你学数组的时候,没遍历过、、、、

比方说,我把这本故事书按章节编排到数组story[]里,然后从第1章一直循环输出到100章,把每一章都输出完了,那就是遍历了。

注意一下,要访问了所有的数据,才叫做遍历,只访问了一部分,那不是遍历的(等你什么时候把牛津高阶上的单词都背完了,你就可以说你自己遍历了牛津高阶23333)

枚举

枚举是JDK1.5才出现的,说白了,就是同一个类型的东西所组成的一个有限集合,就叫做枚举,网上例子都举烂了的颜色集合、星期集合、月份集合,都是枚举。

public enum ColorEnum {
    RED("red","红色"),GREEN("green","绿色"),BLUE("blue","蓝色");

结语

毕竟这只是简单科普,我也就不详细的说了,大家知道那么个概念就好,有时间的话,我再慢慢的铺开来说。完结撒花

Last modification:October 24th, 2018 at 04:58 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment