剑指Offer--求1+2+3+...+n

版权声明:版权所有,转载请注明出处。 https://blog.csdn.net/pdfcxc/article/details/84370959

题目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

先上代码:

public class Solution {
    public int Sum_Solution(int n) {
        int ans=n;
        boolean b=(ans!=0) && ((ans+=Sum_Solution(n-1))!=0);
        return ans;
    }
}

解题思路:

看到这道题我首先想到的是等差数列求和的公式,可是题目上不能采用乘除法。想一想其他的方法基本上都要进行最后n的判断来结束加法。最后在看了评论区的解法后才明白该怎么做。

这道题采用的是递归的解法,我们知道递归解法最后是需要一个结束条件的,如果没有结束条件的话,会一直递归下去,那么我们这道题也就无解了。仔细观察下面的式子:

boolean b=(ans!=0) && ((ans+=Sum_Solution(n-1))!=0);

其实递归的结束条件就包含在这个里面。&&是逻辑与,逻辑与有个短路特点,如果前面为假的话,后面的就不会进行计算了(这里在编程的时候我们也可以利用这种特点来减少运算),所以当递归到n=0的时候,就不会再继续往下进行递归了。

猜你喜欢

转载自blog.csdn.net/pdfcxc/article/details/84370959
今日推荐