我在尝试跟踪函数中的计数器变量时遇到了一些困难。
我创建了一个函数,它以一个数字作为单个参数,并通过递归将该数字乘以二,将所有乘以二的数字相加,在下面的代码中更清楚地说明了我的意图:
sum :: Float -> Float
sum x = x + sum (2*x)
然而,我面临的困难是,我希望该函数递归仅限于十次。因此,在累加了十个数字后,我希望它停止递归。我尝试使用计数器来跟踪函数递归的次数,但没有成功。
这是我尝试过的代码:
sumTen :: Float -> Float
sumTen x n
where
n=10
|n == 0 = x
|otherwise = x + sumTen (2*x) (n-1)
我意识到上面的代码无法正常工作,因为在每次递归调用中,计数器n
都将被赋予数字十的值,这意味着它永远不会达到基本情况n == 0
。
使这个问题变得困难的是,sumTen
必须使用一个参数进行调用。 在上面的代码中,我尝试给函数一个默认的参数n
,并赋予一个预定的值,但很明显它不能正常工作。
有人能帮助我让这个递归函数在'n'个递归调用后停止吗?
asin
应该改成sum
,或者反过来。 - afsantossumTen x
。但是您希望递归调用在十次迭代后结束。是这样吗? - afsantos