本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。post
不能使用乘除法,不能使用循環語句、判斷語句。能夠考慮的有 單目運算符:++和--,雙目運算符:+,-,移位運算符<<和>>,關係運算符>,<等,邏輯運算符&&,||,&,|,^,賦值= url
最有可能使用到的就是邏輯運算符了。若是記得它們有短路特性的話,就能夠看成if來使用了。spa
例如:對於A && B,若是A爲假,那麼就不執行B了;而若是A爲真,就會執行B。code
對於A || B,若是A爲真,那麼就會不執行B了;而若是A爲假,就會執行B。htm
所以咱們使用遞歸來代替循環,用邏輯運算符&&或者||來代替判斷語句。blog
代碼實現功能爲:當n大於1時,和爲f(n)=f(n-1)+n,n=1時,f(n)=1遞歸
//題目:求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.學會利用&&和||的短路特性來代替判斷語句;get
2.使用短路特性時,記得後面的判斷語句要寫完整
即:不能只寫了(sum+=getSum(n-
1
)),要完整寫出
(sum+=getSum(n-
1
))
>
0
還有就是前面要賦值給flag纔算完整的語句。
3.利用遞歸來代替循環。