特殊方法求 1 到 n 的和

来源:互联网 发布:淘宝自制护肤品曝光 编辑:程序博客网 时间:2024/06/06 01:18


1. 描述

求 1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语
句(A?B:C)。

这道题其实没什么意思,但是可以温习一下解决的方法所用到的知识。

2. 解法一

可以用递归做,但是什么时候停止的,如果用if语句那肯定是很用以了,当n = 0时停止递归。还可以用另外一种办法,就是当 n = 0 时调用另一个函数,这个函数唯一的语句就是返回0。用指向函数的指针可以实现的。

代码如下:

typedef int (* func)(int);int sum0(int zero){    return 0;}int sum(int n){    func call_sum[] = {sum0, sum};    return n + (*call_sum[!! n])(n - 1); }

关键在于 !!n 的语句,当n != 0时, !!n 始终为1,因此调用的函数始终是sum,当n =0时,!!n 为0,调用的函数为sum0。

^_^, 是不是很骚?


3. 解法二

这个解法更简单,但只能在GCC编译器下执行。由于需要点知识,等学会了在来解答。



原创粉丝点击