米老师给了我们三个具体的数字,让我们写一个找出其中最大的数字的方法。
a = 10 , b = 20, c= 5
先说说别人的方法:
1. 朴素版:
Int max = a;
If(b>max){max=b;}
If(c>max){max=c;}
Return max;
2. 繁体版:
If(a>b){
max = a;
If(c>a){
max=c;
}
}
else
{
max=b;
if(c>b){
max=c;
}
}
再看说说我的吧:
第一版,iif版:
dim max as integer
max = iif(a>b,a,b)
max=iif(max>c,max,c)
第二版,c语言iif版:
int max;
max = a>b?a:b;
max = max>c?max:c;
return max;
第三版,朴素版:
int max;
max = a;
if(b > max)
{
max = b;
}
if(c > max)
{
max = c;
}
return max;
先说说米老师的讲解过程吧:
首先米老师支持朴素版。
米老师说朴素版的精髓就在int max = a; 这句话,在这句话中,首先认为第一个数是最大的,他的精髓就在于明明不知道哪个是最大的,却认为第一个是最大的。这就是说我们在做一件事时,在刚开始不知道结果时,首先假设出一个可能的结果,然后通过不断的努力再去实现他。就好比要在一堆苹果中找出最大的一个,刚开始不知道哪一个是最大的,所以就先拿一个并认为他是最大的,然后再和后面的去逐个比较,就能找到最大的那一个。
米老师还类比了提高班,提高班在开办之初,米老师根部不知道会不会成功,但米老师相信他会成功,然后一直坚持到现在,就成功了。
米老师还说,这种朴素的方法还体现了全局观的思想。他是站在全局的角度去考虑问题的,所以写出了这样朴素的代码,而其他的方法由于没有站在全局的角度,所以写的代码就很繁琐了。
米老师对任何问题总是能够把它抽象到非常高的层次,然后将其中的精髓提炼出来。然后在以后遇到相同的问题时就能够更有效地去解决它。
再说说我个人的想法:
首先米老师用这个问题来靠我们,我觉得必须在代码的效率和清晰度上下功夫。
我的第一版代码其实就是比最繁琐的那个好一点,我之所以没有写成那样的,和我以前的代码经验积累是有关的,如果让一个刚入门的人来写这段代码,他如果写得出来的话,应该就是那个样子。
我的第一版代码在清晰度上还可以,但是效率上就存在问题了在某种情况下会出现变量给自己赋值的情况。这个本来是完全没有必要的。
第二版采用了c语言的选择运算符,和第一种没有什么本质的区别。
我的第三版和朴素版的基本相同,我是在考虑到了第二版的效率所作的改动。
其实要在n个数中找到最大的,最多需要n-1次比较。这样的话,完全可以用一个循环来实现,但在这个例子中,由于只有三个数,且考虑到循环的开销比较大,所以只需要使用两个if语句即可。
我觉得写程序不可能第一次就写得非常完美,写程序就好比吃饭,要一步步来。随着经验的积累,我们写的程序一定会越来越完善的。