求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路一:等差数列求和公式:n*(n+1)/2=(n^2+n)/2,由于不能用除法,因此可以右移一位表示除以2
1 public class Solution { 2 public int Sum_Solution(int n) { 3 if(n<1) return -1; 4 int result = (int)(Math.pow(n,2) + n); 5 return result >> 1; 6 } 7 }
思路二: &&的短路功能:即A&&B中,加入A为假,那么B就不会被运算,因此把递归放在B中,而将终止条件放在A中。
1 public class Solution { 2 public int Sum_Solution(int n) { 3 int sum = n; 4 //n>0是终止条件 5 //(sum+= Sum_Solution(n-1))>0 这个肯定>0,肯定是true 6 //真正的目的是想让它递归地执行里面的加法 7 boolean temp = n>0 && (sum+= Sum_Solution(n-1))>0 ; 8 return sum; 9 } 10 }