問題:請(qǐng)自己動(dòng)手寫一個(gè)pow()函數(shù)。
??我們?cè)趯W(xué)習(xí)C語言的時(shí)候,可能已經(jīng)接觸過pow()函數(shù),它是C語言標(biāo)準(zhǔn)庫函數(shù)中自帶的一個(gè)函數(shù),使用的時(shí)候只需包含<math.h>就可以了,不需要你自己動(dòng)手去實(shí)現(xiàn)。
??在C語言標(biāo)準(zhǔn)庫函數(shù)中,pow()函數(shù)是這樣聲明的double pow(double x, double y),其作用就是返回x的y次冪。冪函數(shù)的實(shí)現(xiàn)還是比較簡單的,我們就自己動(dòng)手寫一個(gè):
func challenge(number: Int, power: Int) -> Int {
// 對(duì)輸入的數(shù)據(jù)進(jìn)行校驗(yàn),確保底數(shù)和冪指數(shù)都是有意義的
guard number > 0, power > 0 else { return 0 }
// 初始化返回值,默認(rèn)其值為底數(shù)
var returnValue = number
for _ in 1..<power {
// 返回值 = 底數(shù) * 底數(shù)(一共執(zhí)行power-1次)
returnValue *= number
}
// 返回最后的結(jié)果
return returnValue
}
challenge(number: 2, power: 3) // 結(jié)果為8
??除了上面那種解決方案之外,還可以使用遞歸算法,這樣看上去可以讓代碼更簡潔:
func challenge1(number: Int, power: Int) -> Int {
guard number > 0, power > 0 else { return 0 }
// 如果冪指數(shù)為1,直接返回底數(shù)
if power == 1 { return number }
// 當(dāng)冪指數(shù)不為1時(shí),直接返回底數(shù)的power - 1次方
return number * challenge1(number: number, power: power - 1)
}
challenge1(number: 2, power: 5) // 結(jié)果為32