函数查表、逗号运算符 解决数学运算问题

今天在网上无意中看到有人提出一个趣味性问题:

不使用

乘除操作,位操作,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\n", 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的值

 

posted @ 2014-03-18 19:46  吃西瓜的星星  阅读(138)  评论(0编辑  收藏  举报