算法--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(详细讲解)
来源:互联网 发布:2010年流行网络歌曲 编辑:程序博客网 时间:2024/06/06 09:05
做题的时候发现了这道题。苦苦深思不得其解。在网上看到答案被其神奇之处震惊,所以特此研究并且详解。
方法一:利用构造函数和静态数据成员
此方法主要实在类中添加构造函数,及一些相关静态函数。
上图:
方法一:class Add{public: Add() { ++num; sum += num; } //重置,将num与sum清0 //这一步很重要,如果想要调两次构造函数,则这个方法必须要用上 static void Reset() { num = 0; sum = 0; } static int GetSum() { return sum; }private: static int num; static int sum;};int Add::num = 0;int Add::sum = 0;int add1(int num){ Add::Reset(); Add *a = new Add[num]; delete[]a; a = 0; return Add::GetSum();}
方法二:利用虚函数
思路:利用虚函数的调用性质去解决问题。
class A;A* Array[2];class A{public: virtual int Sum(int num) { return 0; }};class B:public A{public: virtual int Sum(int num) { return Array[!!num]->Sum(num - 1) + num; }};int add1(int num){ A a; B b; Array[0] = &a; Array[1] = &b; int value = Array[1]->Sum(num); return value;}
方法三:用函数指针实现
//这里大体思想与虚函数差不多typedef int(*fun)(int);//声明一个函数指针int add1(int num){ return 0;}int add2(int num){ //fun是一个指针,定义类型为fun的数组,把数组传给函数指针的fun fun f[2] = { add1, add2 }; //这里同样的类似于递归,递归的出口是add1. //开始都是调用f[add2](num-1),直到num为0,调用add1. return num + f[!!num](num - 1);}
方法四:利用&&的短路特性
方法二,方法三,以及方法四其实都是用到了递归类似的思想。
我们用这种方法详细讲一下过程。
int add(int num, int &sum){ //这里每次num都会减一,一直到num=0的时候停止。此时sum=0,num=0。并且开始逐层返回sum+=num,实现累加。 num && add(num - 1, sum); return (sum += num);}int main(){ int num = 2; int sum = 0; cout << add(num,sum) << endl; system("pause"); return 0;}
阅读全文
1 0
- 算法--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(详细讲解)
- 剑指offer 46---实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。
- 合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 计算1+2+3……+n要求不能使用乘除法,循环,条件判断,选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断
- 实现1+2+3...+n,不能使用*、/、循环、条件判断、选择相关的关键字
- 合并链表和求1+2+...+n不用循环、乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。Java实现
- day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
- 实现1+2+3+...+n。要求不能使用乘除法,for,while,if,else,switch,case,等关键字及条件判断语句。
- node 起步
- WordPress——怎么在WP后台查看日志、分类的ID?
- mybatis与spring整合(方式二)
- win10 Anaconda tensorflow
- Spring MVC 3 总结
- 算法--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(详细讲解)
- CentOS 7 上安装 Docker
- 验证token
- jQuery选择器和选取方法
- [ML笔记]梯度下降和线性梯度下降
- ssm整合的配置文件
- 我的头像的字符画
- ACM动态规划总结
- 2017腾讯编程题----游戏人物标记