我有此功能,需要检查gdc
数字的[1..n]
和n
是否正确== 1
,然后进行一些计算。所以我被困住了,因为我找不到将n的初始值存储到变量的方法。
例如,如果我调用该函数与数字7其递归所以n
变得6
然后5
等等所以我不能gdc
正确; 例如1-7
然后2 - 7
然后3 -7
。您知道如何存储n
to a
变量的值吗?
myproduct :: Integer->Integer
myproduct 0 = 1
myproduct n
|gcd n (n from first call) /= 1 = myproduct (n-1)
|otherwise = x
where
x = n * myproduct (n - 1)
Run Code Online (Sandbox Code Playgroud)
使用辅助函数(通常称为go
)进行递归,并在最外层调用中使用与递归调用中不同的变量名,如下所示:
myproduct :: Integer->Integer
myproduct orig_n = go orig_n
where
go 0 = 1
go n
|gcd n orig_n /= 1 = go (n-1)
|otherwise = x
where
x = n * go (n - 1)
Run Code Online (Sandbox Code Playgroud)