scala - 将递归函数从python转换为scala
问题描述
我正在尝试将这个递归函数从 python 代码转换为 scala。在蟒蛇中:
def func(x,y,z):
if x >= y:
return 0.0
if y>= 12:
return 1.0/6**z
probability = 0.0
for val in [1,2,3,4]:
probability += func(x,y+val,z+1)
for val in [5,6]:
probability += func(x+val,y,z+1)
return probability
print(func(1,7,0))
在scala中,我的代码变成了
object Prob extends App {
println(func(1, 7, 0))
def func(y: Int, x: Int, z: Int): Double = {
if (x>= y) {
return 0.0;
}
if (y>= 12) {
return scala.math.pow(1.0/6,z);
}
var probability : Double = 0.0;
for (i <- 1 to 4) {
probability += func(x,y+i,z+1);
}
for (i <- 5 to 6) {
probability += func(x+i,y,z+1);
}
return probability;
}
}
不幸的是,虽然 python 代码返回正确的值 0.6,但 scala 代码返回 0.0。
scala代码中的错误在哪里?
解决方案
您交换了参数的顺序:
def func(hunter,goose,num):
def func(goose: Int, hunter: Int, num: Int): Double = {
既然你打电话func(1, 7, 0)
,在 scala 中,你会立即遇到hunter >= goose
情况,它会返回0
。
推荐阅读
- machine-learning - 如何解释 SVM 进行回归?
- ios - 在 UIBezierPath 中插入 CATextLayer 并旋转
- google-apps-script - 通过按 googlesheet 中的按钮获取邮件 ID
- aws-sdk - Quicksight 仪表板嵌入 URL 显示 us-east-1 而不是 eu-west-1
- c - 我的简单 C 程序不会执行这个 for 循环(CS50 现金)
- reactjs - 为什么此代码打印“未定义”而不是 StarRating 组件?
- python - python中的多处理解决偏微分方程
- flyte - 错误:没有为 [aws] s3_shard_formatter 设置配置。这是必需的配置
- python-3.x - 按下“Ctrl+C”时 python 回显服务器的 Unicode 错误
- javascript - 单击带有 HTML 脚本的网页上的所有复选框(quickbooks/Safar)