首页 > 代码库 > Thinking in scala (4)----阶乘与尾递归
Thinking in scala (4)----阶乘与尾递归
code1:
object factorial{ def main(args:Array[String])={ println(factorial(args(0).toInt)) } def factorial(x:Int):Int = if (x==0) 1 else x * factorial(x-1)}
这个实现的执行过程如下,比如我们计算4的阶乘factorial(4)
factorial(4)
--> if (4==0) 1 else 4 * factorial(4-1)
-->4*factorial(3)
-->4*(3*factorial(2))
-->4*(3*(2*factorial(1)))
-->4*(3*(2*(1*factorial(0))))
-->4*(3*(2*(1*1)))
-->24
计算机在执行上述计算的过程中,需要用到“栈”,并且我们不难看到为了计算factorial(4),栈不断增大。
为了避免像这样的计算可能导致“栈溢出”,可以采用一个小技巧,就是将上述的递归转化为“尾”递归。
关于尾递归,可以参考:http://en.wikipedia.org/wiki/Tail_call
code2:
object factorial{ def main(args:Array[String])={ println(factorial(args(0).toInt,1)) } def factorial(x:Int,result:Int):Int = if (x==0) result else factorial(x-1,x*result)}
思路也很简单,不再赘述。
Thinking in scala (4)----阶乘与尾递归
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。