递归加法(day1)

社会主义新天地 提交于 2020-01-29 11:13:03

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

使用函数指针

1234567891011121314151617
//使用函数指针 递归加法typedef  (*fun)(int);int func1(int n) {    return 0;}int func2(int n) {    fun f[2] = {func1, func2};    return n + f[(n != 0)](n - 1);}void function1() {    cout << func2(10) << endl;}//----->fun2 end

使用静态变量

1234567891011121314151617181920212223242526272829
//----->fun2 start//使用静态变量class test {    static int N;    static int sum;public :    test() {        sum += ++N;    }    static void reset() {        N = sum = 0;    }    static int getSum() {        return sum;    }};int test::N = 0;int test::sum = 0;void function2() {    test::reset();    test *p = new test[10];    cout << test::getSum() << endl;    delete[]p;}//--->fun2 end

使用虚函数的编译多态性

123456789101112131415161718192021222324
//----->fun3 start//使用虚函数的编译多态性class A {public:    virtual int sum(int n) { return 0; };};class B : public A {public:    int sum(int n) {        A a;        B b;        A *p[2] = {&a, &b};        return n + p[(n - 1 != 0)]->sum(n - 1);    }};void function3() {    B b;    cout << b.sum(10) << endl;}//----->fun3 end

源码github

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!