题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
分析:
如果没有题目中的限制的话,直接乘除法计算为n(n+1)/2,for循环和递归也可以。
如果把sum声明在递归体之内,则应该是从n开始由大到小相加到1,递归部分不涉及sum=0这样的重置情况,具体代码如下:
public class Solution {
public int Sum_Solution(int n) {
int sum=n;
if(n<=0){return 0;}
else{
sum+=Sum_Solution(n-1);//每次都是当前值+内层值,sum首先存储了当前的n值,随后作为当前累加和return
}
return sum;
}
}
限制这样的条件限制使得乘除法和for循环都不可行,递归的话没法用if作为终止判断条件,但这里有个很巧妙的思路,可以用&&与的短路特性,代替if进行条件判断。
public class Solution {
public int Sum_Solution(int n) {
int sum = n;//用n+n-1+...+3+2+1从大到小去相加,递归的出口是sum=n=0时,直接return sum=n=0作为终止
boolean flag = (sum > 0) && ((sum += Sum_Solution(n - 1)) > 0);//这里的boolean flag没有什么直接作用,就是为了完成与运算
return sum;
}
}