今天在网上无意中看到有人提出一个趣味性问题:
不使用
乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数
进行从1到n的累加运算
其中n是一个变量。
思考了会没有头绪,然后看了许多程序员的回帖,然后看到了被自己冷落了许久的东西---函数查表
#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 ", fn(10)); }
有人说时代在进步,这些古老的东西已经没有利用价值了,可我觉得多明白一种方法也许会对以后的编程中多一种解决的方案,谁又能说这种解决方案不行呢?
#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); }
这是一段利用递归操作执行数据累加的代码,这一段代码用到了逗号运算符,也是大家不常用到的东西
return n && (t = sum(n - 1)), t + n;
这一句n先与(t = sum(n - 1))进行逻辑与,然后再进行t+n操作,返回的t+n的值