今天在《剑指offer》里看到了下面这样一个有趣的题,考察程序员的发散思维能力,书上的解法都是C++的,我在网上整理了一些用Java实现的代码以及思路,分享给大家。
题目:求1+2+···+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
点评:这个问题本身没有太多的实际意义,因为在软件开发中不可能有这么苛刻的限制。但不少面试官认为这是一道不错的能够考查应聘者发散思维能力的题目,而发散思维能够反映出应聘者知识面的宽度,以及对编程相关技术理解的深度。
分析:通常求1+2+···+n无外乎这么几种解法:
- 公式:n (n + 1) / 2
- 循环
- 递归
因为不能用乘除法所以第一种思路 pass,循环要使用 for,while 所以也pass掉,那么还剩下了递归这种思路。
解法一:利用短路与的特性实现递归终止
因为递归要想终止必须判断终止条件是否满足,而判断通常情况下需要使用 if else,而题目要求不能使用 if else,我们换一种思路可以使用 “&&” 短路与的特性:当 && 左边的条件为 false 的时候整个表达式就为false,就可以模拟实现 if else 的条件判断。
实现代码: