【Java】 劍指offer(64) 求1+2+…+n 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
阿新 • • 發佈:2018-11-16
本文參考自《劍指offer》一書,程式碼採用Java語言。
題目
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
思路
不能使用乘除法,不能使用迴圈語句、判斷語句。可以考慮的有 單目運算子:++和--,雙目運算子:+,-,移位運算子<<和>>,關係運算符>,<等,邏輯運算子&&,||,&,|,^,賦值=
最有可能使用到的就是邏輯運算子了。如果記得它們有短路特性的話,就可以當作if來使用了。
例如:對於A && B,如果A為假,那麼就不執行B了;而如果A為真,就會執行B。
對於A || B,如果A為真,那麼就會不執行B了;而如果A為假,就會執行B。
因此我們使用遞迴來代替迴圈,用邏輯運算子&&或者||來代替判斷語句。
程式碼實現功能為:當n大於1時,和為f(n)=f(n-1)+n,n=1時,f(n)=1
Java程式碼
//題目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case //等關鍵字及條件判斷語句(A?B:C)。 public class Accumulate { public int getSum(int n) { int sum=n; boolean flag = (n>1) && ((sum+=getSum(n-1))>0); //上面這句話相當於: //if(n>1) // sum+=getSum(n-1); //也可以使用||來實現 //boolean flag = (n==1) || ((sum+=getSum(n-1))>0); return sum; } }
收穫
1.學會利用&&和||的短路特性來代替判斷語句;
2.利用遞迴來代替迴圈。