scala - 为什么这个递归函数不起作用

标签 scala recursion

我有这个函数来递归地计算xn次方:

def pow(x:Double,n:Int):Double={
    if (n==0) 1
    else if (n<0) 1/pow(x,-n)
    else if (n%2 == 1) x*pow(x,n-1)
    else pow(pow(x,n/2),2)
}

但这不适用于最后一种情况(即正偶数)。它就卡在那里。 但是,如果我给出这个:

def pow(x:Double,n:Int):Double={
    if (n==0) 1
    else if (n<0) 1/pow(x,-n)
    else if (n%2 == 1) x*pow(x,n-1)
    else {val y=pow(x,n/2); y*y}
}

它按预期运行。谁能告诉我第一个实现错误的原因是什么。我正在尝试回答本书第 2 章中的问题 10 Scala For Impressive

最佳答案

用你的方法在某个时候你最终会做:

pow(pow(x,1),2) -> pow(x*pow(x,0),2) -> pow(x,2) -> pow(pow(x,1),2) -> ...

这是因为 n==2 仅由最后一个条件处理,最终会一遍又一遍地调用自身......

关于scala - 为什么这个递归函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167478/

相关文章:

c# - 为什么我在控制台中得到问号而不是 double 值/NaN,这是什么意思?

java - 自顶向下、非递归合并

json - PostgreSQL 中的递归 JSON 生成

groovy - 为什么在 Groovy shell 中运行闭包递归示例时会收到 "No signature of method""错误?

scala - 什么是 Akka Streams 中的 Flow#join

scala - 如何访问案例类字段字段的字符串名称中的值

scala - 未找到 plotply scala sbt Unresolved 依赖项

javascript - 使用 RegExp 递归检索多个捕获组

multithreading - 在 Scala Actor 中集成自主和 react 行为的最佳方式?

scala - 如何在 Play 框架中使用 SORM 框架?