【Java】 劍指offer(64) 求1+2+…+n

 

本文參考自《劍指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遞歸

 

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.學會利用&&和||的短路特性來代替判斷語句;get

  2.使用短路特性時,記得後面的判斷語句要寫完整

    即:不能只寫了(sum+=getSum(n-1)),要完整寫出(sum+=getSum(n-1))>0

  還有就是前面要賦值給flag纔算完整的語句。

  3.利用遞歸來代替循環。

 

更多:《劍指Offer》Java實現合集 

相關文章
相關標籤/搜索