Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

Kotlin Kata - 尾遞迴版級數和

輸入正整數 n,回傳 1 + 2 + … + n 的總和

題目保證輸入的 n > 0 且 n < 999_999_999

題目要求必須使用尾遞迴的方式撰寫

(參考:Kotlin 尾遞迴

Example 1:

Input: 10 Output: 55,1 + 2 + … + 10 = 55

Example 2:

Input: 1 Output: 1

Example 3:

Input: 999_999_999 Output: 499999999500000000

tailrec fun sum(n: BigInteger): BigInteger{}

解答

點擊展開解答

要用尾遞迴的方式處理費式數列

sum() 函數的參數是不夠的

我們必須要宣告新的函數來進行處理

利用 BigInteger 的操作

加上利用預設參數,我們可以寫成

tailrec fun sum(number: BigInteger, answer: BigInteger = BigInteger.ZERO): BigInteger {  
    return when (number) {  
        BigInteger.ZERO -> answer  
        else -> sum(number - BigInteger.ONE, answer + number)  
    }  
}

遞迴的邏輯會變成

  • sum(5, 0)
  • sum(4, 5)
  • sum(3, 9)
  • sum(2, 12)
  • sum(1, 14)
  • sum(0, 15)
  • return 15

回到 Kotlin Kata 列表