问题重现:
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
解法一:&&的妙用
#include <stdio.h>
int fun(int n){
int sum=0;
//只有n不为0时才给sum赋新值
n && (sum=fun(n-1));
return n+sum;
}
int main()
{
printf("%d\n",fun(10));
return 0;
}
解法二:函数指针的用场
typedef作用说明:
1、给变量一个易记且意义明确的新名字(别名):
如,typedef struct Node LNode,typedef int* pInt等
2、简化一些比较复杂的类型声明(自定义新类型):
如,有一个char *(*fun)(int,char *)的函数指针,现只需要typedef char *(*fun)(int,char *)即可,此后fun就代表此类型了
#include <stdio.h>
//定义一个函数指针类型fun
typedef int (*fun)(int);
/*结束函数*/
int fun1(int n){
return 0;
}
/*中间函数*/
int fun2(int n){
//函数指针数组
fun f[2]={fun1,fun2};
//printf("%d",!!n);
// !!n,当n==0时,组合结果才为0,即二次取反
return n+f[!!n](n-1);
}
int main()
{
printf("%d\n",fun2(10));
//system("pause");
return 0;
}