发散思维:求1+2+3+….+n

2019-05-08  本文已影响0人  I讨厌鬼I

问题描述

看似很简单的问题,求1+2+3+...+n的和,但是有特殊条件,不可以使用乘除法、forwhileifelseswitchcase等关键字及条件判断语句(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);当ans0的时候不计算后面的值,直接返回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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读