C++ 短路求值特性的利用
2018-03-02 11:37
1016 查看
题目
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解决方案
class Solution { public: int Sum_Solution(int n) { int res = n; res && (res = res + Sum_Solution(n-1)); return res; } };
知识点
1.利用递归避免循环的使用2.利用C++的短路求值特性,实现递归的终止,避免了条件判断。
3.短路求值
作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值(short-circuit evaluation)。这是这两个操作符的一个重要属性。
假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:
expr1 && expr2
expr2 将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。
类似地,如果expr1的值不是0,那么在下面的这个逻辑表达式的求值过程中:
expr1 || expr2
expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。
Reference
短路求值题目讨论
相关文章推荐
- 利用栈的特性对一个表达式求值
- 利用短路求值和函数实现判断与(部分)循环
- 剑指offer经典题(利用C++的特性)
- c++中短路求值的妙用
- c++ 实验2-利用函数求值
- 巧妙的利用C++的特性实现Profiling
- 利用 C++ 11 特性实现多线程计数器
- c++表达式求值(利用数据结构栈)
- C++表达式求值(利用数据结构栈)
- C++利用链栈实现表达式求值
- C++短路求值
- 利用C++模板特性计算各整数类型的最大最小值
- C++ "短路求值"策略
- C/C++为什么要短路求值?
- cocos2d-x C++ 利用C++11新特性+runAction RepeatForever Sequence DelayTime做一个持续循环函数 每秒更新 5次后停止
- 利用 C++ 11 特性实现多线程计数器
- C++ 利用类的静态成员特性定义全局变量来存储信息
- 利用C++ 11特性实现多线程计数器
- C++表达式求值(利用数据结构栈)
- c++中利用sizeof运算符计算结构体大小问题探讨