2017-05-07 63 views
-1

我讀斯卡拉急躁,第2章和有一個鍛鍊的問題,我不理解正是它想要的東西:斯卡拉急躁,第2章,運動對遞歸函數戰俘

寫一個計算x^n的函數,其中n是一個整數。使用 以下遞歸定義:

  • X^N = Y * Y如果n是偶數和正的,其中Y = X ^(N/2)
  • X^N = X * X ^(N -1)如果n爲奇數和正
  • 的x^0 = 1
  • X^N = 1/X^-n如果n是負

如果問題想要的x^N,我可以使用scala.math中定義的pow方法:

def pow(x: Double, y: Double): Double 
+1

這是一個練習。讓你練習使用遞歸。這是任何此類任務的重點 - 用理論概念解決問題。大多數問題可以通過許多不同的方式解決。學習編程就是能夠將這些概念的大部分應用於真實的源代碼中。 – GhostCat

+1

這是一個練習。目標是讓你學習一些東西(遞歸,在這裏)。不要做一些有用的事情,儘可能簡潔。 –

回答

2

的問題是要求(重新)實現對整數遞歸POW功能:

def pow(x: Int, y: Int): Int = ... 

你需要寫一個比天真O(n)算法更加智能的實現:

def slowPow(x: Int, y: Int): Int = 
    if (y == 0) 1 else x * slowPow(x, y - 1) 

嘗試使用給定的遞歸定義來代替...

要回答你的問題di直接,我不認爲你可以使用scala.math中的那個躲避問題。正如你注意到的,它只適用於Doubles。也不是在Scala遞歸或實施。