2014-12-03 86 views
1

這不是家庭作業,它只是練習。我寫的第一種方法是:遞歸......我卡住了

編寫一個靜態遞歸方法的強大功能,它接受兩個名爲x和p的int參數,並返回x乘以p乘以p次。

我這樣做,這裏是代碼:

public static int power(int x, int p) 
{ 
    if(p==0) 
    { 
     return 1; 
    } 
    else 
    { 
     int result = x * power(x, p - 1); 
     return result; 
    }  
} 

下一個問題是:

在金字塔的每個級別是一個正方形,所以如果有N個級別中,底層有n * n個球,並且球的總數僅爲 (n * n)+(高度n-1的金字塔中的球的數量)。

高度爲1的金字塔中只有一個球。編寫一個靜態遞歸方法getPyramidCount,它採用表示金字塔等級數的單個int參數,並返回球的總數。 (使用上面的電源方法來平方數。)

我很沮喪,因爲我不知道如何寫這個。我知道我想製作另一種包含力量方法的方法,但我很無能。你能幫我一下嗎?在這一點上,我覺得看到某人的代碼是我理解的唯一途徑。

編輯:並不意味着有2。它應該是x!我正在做2到8的力量,忘了放2而不是2!

+0

您的代碼無法解決指定的問題。 [3的權力不是8](http://ideone.com/u4FLV9)... – 2014-12-03 08:16:21

+1

你的權力的方法是錯誤的,因爲你已經告訴。至於金字塔問題,也許你應該首先在[維基百科](http://en.wikipedia.org/wiki/Square_pyramidal_number)上看到它,然後你可以想出一個想法。 – RealSkeptic 2014-12-03 08:18:27

+0

如果你真的想讓自己的腳練習遞歸,試着編寫一個方法來掃描一個目錄及其所有子目錄(及其所有子目錄等),以查找名稱以特定字符串開頭的文件。這是一個非常容易可視化,從而理解遞歸的應用。 – Gimby 2014-12-03 08:38:52

回答

2

首先這行:

int result = 2 * power(x, p - 1); 

應該是這樣的:

int result = x * power(x, p - 1); 

但你的金字塔,你代碼只有一個輸入,其值爲n,返回值如您所說是n +金字塔(n-1);

+0

請不要給人們逐字的解決方案作業/練習題... – 2014-12-03 08:18:32

+1

好的,我會改變金字塔代碼 – Lrrr 2014-12-03 08:18:58

+0

我知道這個網站上的人不喜歡別人發放代碼,但這是爲了練習。我根本沒有打開這個代碼。遞歸似乎是一個令人困惑的概念,我的教授無法解釋清楚,教科書也很混亂。感謝您的回答,我會在回憶練習遞歸時回顧並參考。 – NewbieNick 2014-12-03 08:33:00

3

不要乘以2。這是x * xp次。像,

public static int power(int x, int p) { 
    if (p <= 0) { 
     return 1; 
    } 
    return x * power(x, p - 1); 
} 
1

首先,您的power方法是錯誤的。它會計算2^p而不是x^p。

變化

int result = 2 * power(x, p - 1); 

int result = x * power(x, p - 1); 

現在,對於金字塔的問題,遞歸是:numBalls(n) = n^2 + numBalls(n-1)

因此,該方法是這樣的:

public static int numBalls (int n) 
{ 
    if (n==1) 
     return 1; 
    else 
     return power(n,2) + numBalls(n-1); 
}