今天看博客的时候遇到一道很有意思的题目,这里和大家分享一下,希望大家能感兴趣,同时也给自己做一个记录。
问题描述:不让用for语句、while语句、if语句以及三元运算符(?:)实现1+2+3+……+n
这是一个典型的求等差数列前n项和的问题,如果没有题目的限制条件其实很简单。根据题目的限制,很容易就想到应该用递归进行实现。但是题目的限制不能使用if语句和三元运算符,这就给递归的结束造成了困难。这里大家可以想想应该如何实现。
根据提示,想到了任何一门语言都涉及的一个知识点:短路。短路就是在一个较长的与或表达式中,前面的boolean表达式的值为true或者false的时候,后面的表达式就不会执行。基于此,我们就知道该如何编程实现了,其java代码如下:
public class Solution {
public static void main(String[] args) {
System.out.println("Result:" + superposition(100));
}
/**
* 功能:计算以1为首项,公差为1的等差数列的前n项和
* 1+2+3+4+……+n
* 要求:不能用for、while、if以及三元运算符(?:)
*/
public static int superposition(int n) {
int result = n;
//当n=0时,(n!=0)为false,导致后面的(result+=superposition(n-1))不会再执行,达到结束程序的目的
boolean temp = (n != 0) && true && (Boolean.valueOf((result += superposition(n - 1)) + ""));
return result;
}
}
============
Result:5050
如果你有什么别的好方法,欢迎交流分享。