1. 程式人生 > >【Java】 劍指offer(64) 求1+2+…+n 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

【Java】 劍指offer(64) 求1+2+…+n 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

 

本文參考自《劍指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.利用遞迴來代替迴圈。

 

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