问题描述
看似很简单的问题,求1+2+3+...+n
的和,但是有特殊条件,不可以使用乘除法、for
、while
、if
、else
、switch
、case
等关键字及条件判断语句(A?B:C)
。
输入:
10
输出:
55
思路:
提到不能用循环和乘除法,很快想到用递归,但是不能用条件判断语句如何确定递归出口。答案是利用短路原则:
(表达式1)&& (表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”
(表达式1)|| (表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”
那我们可以使用boolean flag = (ans>0)&&((ans += Sum_Solution(n-1))>0)
;当ans
为0
的时候不计算后面的值,直接返回0
,得到递归出口。
代码:
public class Solution {
public int Sum_Solution(int n) {
int ans = n;
boolean flag = (ans>0)&&((ans += Sum_Solution(n-1))>0);
return ans;
}
}
网友评论