browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

高斯求和与思想禁锢

Posted by on 2008 年 07 月 16 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

老调重弹,一个象牙塔和产业背道而驰的事情。纯对事而言,现实中未必有;但是,必然会有类似的情况发生。所以,这个话题暂且算是一个警钟,仅此而已。
那么开始我们古老的命题:编写一个函数,求1+2+3+ …… +n。
标准答案是:

C++代码
  1. int getsum(int n)   
  2. {   
  3.     int i;   
  4.     int sum = 0;   
  5.     for (i = 1; i <= n; ++i)   
  6.         sum += i;   
  7.     return sum;   
  8. }  

但是,如果是在产品代码中,这个函数大多会这么写:

C++代码
  1. int getsum(int n)   
  2. {   
  3.     return (1 + n) * n / 2;   
  4. }  

一位名为LL的网友留言说:他当时刚学C的时候,老师出了道从1加到100的题,他就想过用高斯数列,但老师说他这不是编程,而是偷机取巧小聪明。
虽然高斯求和公式明显优于循环的解决方案,但是,对于课堂上讲授概念的示例来说,用循环来求解等差数列之和还是相当适合教学的例子,而高斯求和公式就显得不合时宜了。
很遗憾的是,我们的砖家和叫兽们在这个过程中并没有扮演一个光彩的角色。就像LL网友的老师一样,他们竟然对高斯求和公式采取了敌视甚至鄙视的态度。
我想,如果他们这么说,效果可能会更好一些——
“其实,对于这个问题来说,高斯数列才是更优的解决方案。但我在这里之所以使用循环,是为了让同学们能更容易地了解循环的概念和使用方法。”
我并不想把问题扩大化,但是的确有一个不容忽视的现状:如果你有机会的话,可以把这个命题作为求职笔试题用来考考应届毕业生,相信你一定会发现有一大半学生的思维方式被禁锢在了象牙塔内。

订阅本站

2 Comments

  • At 2008.07.19 20:53, 真千里 said:

    比较赞成,因为程序代码不会给用户看,用户的数学基础也不一定好,清晰只是方便用户,对于真正的程序员清晰不是必须的。(纯属个人理解)

    • At 2008.07.22 22:13, 花好月圆 said:

      所以能成大器者,必不屈一格~

      (Required)
      (Required, will not be published)