2010-04-23 72 views
0

首先,這不是功課 - 只是我的好奇心,因爲我由於某種原因不能解決它我的頭。我一直都在想這些愚蠢的事情,當我無法解決它們時,它會讓我感到很難過。遞歸的功能,看看你能不能解決它

代碼示例是用C#編寫的,但解決方案不一定要用任何特定的編程語言。

long powerofnum(short num, long powerof) 
    { 
     return powerofnum2(num, powerof, powerof); 
    } 

    long powerofnum2(short num, long powerof, long holder) 
    { 
     if (num == 1) 
      return powerof; 
     else 
     { 
      return powerof = powerofnum2(num - 1, holder * powerof, holder); 
     } 
    } 

正如你所看到的,我有兩種方法。我打電話給powerofnum(value,powerofvalue),然後用第三個參數作爲佔位符調用下一個方法的權值,以便通過遞歸記住原始的powerof值。

我想完成的是隻用一種方法來做到這一點。 我知道我可以在第一個方法中聲明一個變量來記住它,然後從0到num的值迭代。但是,因爲這是一個理論問題,我希望它遞歸地完成。

我也可以在第一個方法中取第三個參數,稱爲無論如何存儲值,就像我在第一個調用的第二個方法中一樣,但看起來非常愚蠢。爲什麼你必須寫兩次似乎是相同的參數?

規則在短期解釋說:

  • 沒有迭代
  • 具體範圍,只
  • 只有一個方法

總之變數,我會很感激一個乾淨的解決方案。

祝你好運:)

回答

3

僞代碼:

// power(x, y) == x^y, only works for positive integer y 
function power(x, y) { 
    return y <= 1 ? x : x * power(x, y - 1); 
} 
+0

簡直太神奇了,謝謝:) – 2010-04-23 23:37:38