2012-03-13 97 views
-3

這是我有一個機智的理解問題的代碼。到目前爲止,我知道這裏的代碼通過了int a和int b。然後檢查int b是否等於0,如果是則返回1.然後檢查b是否爲1,如果是,則返回int a。但是我沒有得到這段代碼的最後部分。它與遞歸的東西,但我沒有得到它。這種遞歸方法做什麼?

public static int mystery(int a, int b) { 
if(b == 0) { 
return 1; 
else if(b==1) { 
return a; 
return a * mystery(a,b-1); 
+2

你做了什麼試圖解決這個問題?首先嚐試自己的作業。 – 2012-03-13 04:37:00

+4

這是功課嗎? – Perception 2012-03-13 04:37:12

回答

2

運行在紙上:

神祕(10,20)

b == 0(假)b == 1(假),以便返回10 *神祕(10,19)

神祕(10,19)

歸結到返回10 *神祕(10,18)

等。

嘗試使用不同的值例如神祕(20,10)神祕(5,5);

3

此代碼看起來像指數運算,其中a是基數,b是指數。所以在b = 0的情況下,顯然,按取冪規則的答案是1。當b = 1時,則return a因爲a^1 = a。否則,在遞歸的基本情況爲b = 1b = 0條件將不是基本情況,如果b > 0)的情況下,使用乘法來遞歸地獲得結果。順便說一下,你需要在代碼中加上適當的括號來編譯它(花括號需要關閉)。

public static int mystery(int a, int b) { 
     if(b == 0) { 
      return 1; 
     } else if(b==1) { 
      return a; 
     } 
     return a * mystery(a,b-1); 
    } 

例如,

mystery(2, 6)返回64作爲結果。

+0

爲別人做作業的方式 – 2012-03-13 22:12:57

+1

爲什麼這麼認真?減倉! – 2012-03-14 05:57:13