- 论坛徽章:
- 0
|
这个题目是在这里看到的http://blog.csdn.net/g9yuayon/archive/2007/05/16/1611451.aspx
从 Joe Marshall论证编程是艺术的文章上看到的。编程到底是不是艺术已经快变成继编程语言和Emacs vs Vi之后另一Flame War话题。有兴趣的可以去看reddit的讨论。有意思的是一段漂亮的代码,实现SICP上一坨练习题1.3:
实现一个带三个参数的函数。这个函数返回三个参数中最大的两个参数的平方和。
题目用来训练学生对条件分支的理解。常规的解法是(迎合一下各位老大,改成C了):
- int sum_square_largest(int x, int y, int z)
- {
- if (y > x && z > x) {
- return y * y + z * z;
- }
- if (x > y && z > y) {
- return x * x + z * z;
- }
- if (x > z && y > z) {
- return x * x + y * y;
- }
- }
复制代码
但Joe老大给出了一个非常漂亮的解法。简洁直观,巧妙地利用递归大幅简化判断。
- int sum_square_largest(int x, int y, int z)
- {
- if (x <= y && x <= z) {
- return y * y + z * z;
- }
- return sum_square_largest(y, z, x);
- }
复制代码
这段代码符合Joe对判断一件作品是否是艺术的四个标准:
A) 这段代码非人(?)不能写出,富于想象力。
B) 这段代码除了实现既定功能外,具有高度的表现力。
C) 这段代码很美。
D) 这段代码传递的美感和思想超越了它自身。 |
|