今天在网上无意中看到有人提出一个趣味性问题:
不使用
乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数
进行从1到n的累加运算
其中n是一个变量。
思考了会没有头绪,然后看了许多程序员的回帖,然后看到了被自己冷落了许久的东西---函数查表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
#include <stdio.h> typedef
int (*F)( int ); int f0( int
n) { return
0; } int fn( int
n) { F f[2] = { f0, fn }; return
n + f[n>0](n - 1); } int
main() { printf ( "%d\n" , fn(10)); } |
有人说时代在进步,这些古老的东西已经没有利用价值了,可我觉得多明白一种方法也许会对以后的编程中多一种解决的方案,谁又能说这种解决方案不行呢?
1
2
3
4
5
6
7
8
9
10
11 |
#include <stdio.h> int sum( int
n) { int
t = 0; return
n && (t = sum(n - 1)), t + n; } int main() { int
a=sum(10); printf ( "%d" ,a); } |
这是一段利用递归操作执行数据累加的代码,这一段代码用到了逗号运算符,也是大家不常用到的东西
1 |
return
n && (t = sum(n - 1)), t + n; |
这一句n先与(t = sum(n - 1))进行逻辑与,然后再进行t+n操作,返回的t+n的值
函数查表、逗号运算符 解决数学运算问题,布布扣,bubuko.com
原文:http://www.cnblogs.com/zhuxiaoxiao/p/3608578.html