【发布时间】:2014-03-26 12:59:00
【问题描述】:
试图解决“不耐烦的Scala”一书中的练习,我有一个小问题。 (以下是我的解决方案)
1:编写一个for循环来计算字符串中所有字母的Unicode代码的乘积。例如,“你好”中的字符的乘积是 825152896
var p = 1; val S = "Hello"
for (i <- S) p*= i
println(p)
2:在不编写循环的情况下解决前面的练习。 (提示:查看 String0ps Scaladoc。)
val St="Hello".map(_.toInt).product ; println(St)
3:编写一个计算乘积的函数 product(s : String),如前面练习中所述。
def product(s: String)={
val S=s; println(S.map(_.toInt).product)
}
product("Hello")
-
使前面练习的函数成为递归函数。
??? I do not know how to do it
我希望有人可以帮助我。 最好的祝福, 弗朗切斯科
【问题讨论】:
-
递归函数是一个调用自身的函数,但在调用之前会检查终止条件以避免无限递归。要递归计算乘积,您需要在函数式语言中实现类似于
fold函数的函数,并将 1 作为累加器的初始值和字符串传递。然后该函数将检查字符串是否为空,并使用字符串的尾部调用自身,如果不是,则使用调整后的累加器。终止时,累加器的值就是结果。
标签: scala