Haskell-如何在递归函数中跟踪计数器

Bol*_*boa 3 recursion haskell

我在尝试跟踪函数中的计数器变量时遇到了一些困难.

我创建了一个函数,它将一个数字作为单个参数,并递归地将该数字乘以2,将所有数字相乘的两个相加,下面的代码使我更清楚我打算做什么:

sum :: Float -> Float
sum x = x + sum (2*x)
Run Code Online (Sandbox Code Playgroud)

但是,我面临的困难是,我希望这个函数只递归十次.所以我希望一旦添加十个数字就停止它.我尝试使用计数器来跟踪函数递归的次数,但无济于事.

这是我试过的:

sumTen :: Float -> Float
sumTen x n
    where
      n=10
       |n == 0 = x
       |otherwise = x + sumTen (2*x) (n-1)
Run Code Online (Sandbox Code Playgroud)

我意识到上面的代码不起作用,计数器n将通过每次递归调用给出值十,这意味着它永远不会达到基本情况n == 0.

使这如此困难的原因是sumTen必须使用一个参数调用.在上面的代码中,我试图给函数一个n带有预定值的默认参数,但它显然不起作用.

有人可以帮助我在'n'递归调用后使递归函数停止吗?

Fer*_*ndo 5

您可以使用辅助功能:

sumNRec x 0     = 0 
sumNRec x times = x + sumNRec (x*2) (times - 1)

sumTen x = sumNRec x 10
Run Code Online (Sandbox Code Playgroud)