2017-10-11 3 views
-2

リストの総和:このメソッドに@tailrecとして注釈を付けることはできませんか?なぜこのメソッドに@tailrecとしてアノテートできないのですか?

def rec(a:List[Int]): Int ={ 

    def rechelper(a:List[Int],n:Int,res:Int) :Int={ 
    if (n==a.length) res 
    else rechelper(a,n+1,res+a(n)) 
    } 
    rechelper(a,0,0) 
} 
+3

'rechelper'は' @ tailrec' ... –

+0

で注釈を付けることが_can_それでない再帰*それはないとしても、再帰的である場合、すべて*、どのようにそれはおそらく*末尾再帰*だろうか? –

答えて

2

recメソッドが末尾再帰型ではないため、このようにすることはできません。 rechelperは尾の再帰的な方法ですので、それを行うことができます。

scala> def rec(a:List[Int]): Int ={ 
    | @tailrec 
    | def rechelper(a:List[Int],n:Int,res:Int) :Int={ 
    |  if (n==a.length) res 
    |  else rechelper(a,n+1,res+a(n)) 
    | } 
    | rechelper(a,0,0) 
    | } 
rec: (a: List[Int])Int 

scala> 
関連する問題