Recca Chao 的 gitHub page

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

View on GitHub

Kotlin Kata - 遞迴版級數和

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

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

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

Example 1:

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

Example 2:

Input: 1 Output: 1

fun sum(n: BigInteger): BigInteger{}

解答

點擊展開解答

利用 BigInteger 的操作

我們可以用下面的方式遞迴

fun sum(number: BigInteger): BigInteger {  
    return when (number) {  
        BigInteger.ONE -> BigInteger.ONE
	else -> sum(number - BigInteger.ONE) + number  
    }  
}

由於這裡只有兩個條件,我們也可以使用 if

fun sum(number: BigInteger): BigInteger {  
    return if (number == BigInteger.ONE) {  
        BigInteger.ONE
    } else {
        sum(number - BigInteger.ONE) + number  
    } 
}

這個遞迴的寫法,導致數字很大時,比方說 n=999_999_999

f(999_999_999) 呼叫了 f(999_999_998)

f(999_999_998) 呼叫了 f(999_999_997) ⋯⋯

依此類推,會需要呼叫很多的函數

如果我們希望可以減少記憶體使用量

可以調整為 Kotlin Kata 尾遞迴版級數和


回到 Kotlin Kata 列表