当我们遇到某一个数字的n次方时,随着n的变大,我们的计算就越容易失误,所以我们数学就出现了指数函数让人们知道随着n的变大,这歌值会越来越不好计算,当然,还有递归函数。
1.当我要计算a的n次方时,可以输入以下代码:
object base41 {
// 案例二:计算a的n次方(递归实现)
def power(a: Int, n: Int): Int = {
// 终止条件:任何数的0次方都为1
if (n == 0) {
1
} else {
// 递归关系:a的n次方 = a * a的(n-1)次方
a * power(a, n - 1)
}
}
def main(args: Array[String]): Unit = {
// 测试案例:计算2的3次方
val result = power(2, 3)
println(s"2的3次方结果为:$result") // 输出:2的3次方结果为:8
// 额外测试:验证其他情况
println(s"5的0次方结果为:${power(5, 0)}") // 输出:5的0次方结果为:1
println(s"3的4次方结果为:${power(3, 4)}") // 输出:3的4次方结果为:81
}
}
运行结果如图所示:
2.汉诺塔游戏
有一种益智游戏叫做汉诺塔,它的游戏场景是给你A,B,C三根柱子,然后在A柱子给你放一些圈圈,由大到小,从下到上,游戏规则是:将A处的圈圈按照从小到大的方式放到C柱子就算胜利,其中大号的圈圈不可在小号圈圈的上面。 它的游戏和递归函数有一种异曲同工之处,你可以输入以下代码:
object base43 {
/*
* 汉诺塔游戏
*/
// A:起点,C表示终点,B表示可以借用的柱子
def f(n: Int, A: String, C: String, B: String): Unit = {
if (n == 1) {
println(s"$A -> $C")
} else {
f(n - 1, A, B, C)
println(s"$A -> $C")
// 白色方框处,将 n - 1 个盘子从 B 移动到 C,借助 A
f(n - 1, B, C, A)
}
}
def main(args: Array[String]): Unit = {
f(3, "A", "C", "B")
}
}
运行结果如图所示:
这只是三层,可以修改4层,5层,6,7,8,9等层数。