JZ47 求1+2+3+...+n****
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
这道题考的是发散思维
除了用公式(n+1)*n/2,无外乎循环和递归两种思路。由于已经明确限制for和while的使用,循环已经不能再用了。递归函数也需要用if语句或者条件判断语句来判断是继续递归下去还是终止递归,但题目不允许使用这两种语句了
剑指offer上给了四种方法
(1)构造函数
【围绕循环做文章】先定义一个类型,接着创建n个该类型的实例,那么这个类型的构造函数将确定会被调用n次;我们可以将与累加相关的代码放到构造函数里
(2)虚函数
【围绕递归做文章】定义两个函数,一个函数充当递归函数的角色,另一个函数处理终止递归的情况;需要在两个函数里二选一(很容易想到布尔变量,比如true(1)的时候调用第一个函数)
如果感兴趣再看吧,太复杂了!