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


 

本文參考自《劍指offer》一書,代碼采用Java語言。

更多:《劍指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.使用短路特性時,記得后面的判斷語句要寫完整

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

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

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM