求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
2.利用虚函数求解 一个类中函数用于返回,一个类继承该类实现一个递归相加的函数并对基类的sum进行重写。定义两个基类的指针,一个指向基类对象,一个指向子类的对象。
class A; A* Array[2]; class A { public: virtual int Sum(int n) { return 0; } }; class B: public A { public: virtual int Sum(int n) { return Array[!!n]->Sum(n-1)+n; } }; int Sum_Solution(int n) { A a; B b; Array[0]=&a; Array[1]=(A*)&b; return Array[1]->Sum(n); }3.利用函数指针求解 利用上面的思路定义两个函数,一个是用来求和,一个作为结束条件
typedef int (*fun)(int) int part1(int n) { return 0; } int part2(int n) { static fun[2]={part1,part2}; return n+fun[!!n](n-1); ]