版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangvalue/article/details/88023408
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路一:
首先想到的是使用递归的方法,难点就是递归结束的条件不好想,最终巧妙利除法中被除数不能为0的特点来
//确保只要n不为0的情况之下i每次都为1,依次累加1达到最终累加和的目的
//利用了只要n为0的情况就catch退出的目的
public class Solution {
public int Sum_Solution(int n) {
return Sum(n);
}
int Sum(int n){
try{
//确保只要n不为0的情况之下i每次都为1,依次累加1达到最终累加和的目的
//利用了只要n为0的情况就catch退出的目的
int i =1%n;
return n+Sum(n-1);
}catch(Exception e){
return 0;
}
}
}
思路二:
另一种思路是利用了&&短路的想法,当boolean类型的&&两边只有有一个为false就直接后面的不用判断了,同样是巧妙的利用了这个特性来作为递归的结束条件
public class Solution {
public int Sum_Solution(int n){
//定义sum用来作累加和
int sum = n;
boolean ans = (n>0)&&((sum+=Sum_Solution(n-1))>0);
return sum;
}
}