一道算法引发的思考:编程之外,我们还要关注什么

      早上一开机,习惯的进入博客园溜达一圈,看到“博问”上一道问题:“用java和c语言编写程序,求1到100的累加和”,再也熟悉不过的题目了,大学里学汇编,C语言时无论是语法部分还是算法部分都是入门的一个经典例子,太简单了。

      第一个念头蹦出来,来个循环就OK了吧,但做了这么多年设计,也习惯了在思考与行动之间给自己2秒钟反思的空间,嗨,递归怎么样,是不是看起来更优雅一些,前一阵子,园子里刮起了一股优化算法的“园风”,那就考虑怎么优化吧。

      这么简单的题目,要什么优化,要什么自行车,由于本人对算法真是没的说,跟没学过一般一般,所以多次面试考试算法,我直接写,此题不会(貌似不会很有理由一样,也许是我面试不顺利的一个致命问题吧),不过这个题目我还是能够写出来的,不要笑我啊,但仔细想一想,一个面试官会问这些问题吗,为什么会问这些问题,考基础,考思路,绝对不会考人品(也许会吧)......

      带着疑问我在猜测出这道题目的初衷,对一般程序员的面试也许是考思维的严谨程度,程序的通用性、扩展性,代码的规范程度,命名是否让人看着舒服,暂不说这道题的问题:java或c语言吧,用java和C语言,咋一个应该这样出:“用你熟悉的语言编写一道程序:求1到100的累加和”,呵呵这样是否让人看了更易于发挥啊。

      还记得小学时,老师基本上会出一道这样的题目:从1加到100,看那一个小朋友用最短的时间算出来? 呵呵,数学家高斯出现了,他是那个时候算的最快的一位,噢,面试官是不是要这个结果啊!

ContractedBlock.gif ExpandedBlockStart.gif Code
 1        static void Main()
 2ExpandedBlockStart.gifContractedBlock.gif        {
 3            var watch = new Stopwatch();
 4            watch.Start();
 5            Console.WriteLine(String.Format("非递归:{0}",FirstMethod(100)));
 6            watch.Stop();
 7            Console.WriteLine(String.Format("耗时: {0}", watch.Elapsed));
 8
 9            watch.Reset();
10            watch.Start();
11            Console.WriteLine(String.Format("递归:{0}", SecondMethod(100)));
12            watch.Stop();
13            Console.WriteLine(String.Format("耗时: {0}", watch.Elapsed));
14
15            watch.Reset();
16            watch.Start();
17            Console.WriteLine(String.Format("高斯:{0}", ThirdMethod(100)));
18            watch.Stop();
19            Console.WriteLine(String.Format("耗时: {0}", watch.Elapsed));
20
21            Console.ReadKey();
22        }

23
24        private static int ThirdMethod(int n)
25ExpandedBlockStart.gifContractedBlock.gif        {
26            return n*(n + 1)/2;
27        }

28
29        private static int SecondMethod(int n)
30ExpandedBlockStart.gifContractedBlock.gif        {
31            if (n == 1return 1;
32            return n + SecondMethod(n - 1);
33        }

34
35        private static int FirstMethod(int n)
36ExpandedBlockStart.gifContractedBlock.gif        {
37            int s = 0;      
38            int i = 1;      
39            do
40ExpandedSubBlockStart.gifContractedSubBlock.gif            {
41                s += i;
42                i++;
43            }
 while (i <= n);
44            return s;
45        }

     试想,我们只关心写程序,某年某月某日,孩子问起"从1加到100"怎么算啊,我们会不会一念没想到(可能只有我吧)高斯的思维方式,而是......也许在程序人生之外有好多我们要关注的东西,不要为了买房,买车都整天扎在程序里,年迈的时候回忆这一生,回忆到的仅仅是那个程序我写的最牛,当年牛倒了其他大牛,我开发的系统曾经风靡一时,也许对着同行你可以引以自豪,如果你到了敬老院,面对一帮搞政治,经济的,是不是就憋屈了,多关心一些生活中美好的东西,多关心政治、经济、人文,多关心自己的身体。

     算了,不在这里叨叨了,省得大家心烦,最近发现自己out了,发现自己身体每况日下,发现该提醒自己做点别的事情了,同学说去京东大溶洞,我在之前告诉他,我要搞Remoting,写完博文,我也去大溶洞去......

     创造生活,享受生活,每天都快乐、健康,这是给大家的祝愿,也是给自己的祝福。

     周末了,努力耕耘到一线的朋友放松一下吧,每天给自己半个小时的思考时间。

     By the way: 你对你的程序人生是如何规划的?

转载于:https://www.cnblogs.com/winzheng/archive/2009/07/04/1516739.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值