首页 > 解决方案 > 如何将函数调用的值存储到变量中

问题描述

我有这个功能,我需要检查gdc数字[1..n]n== 1,然后做一些计算。所以我被卡住了,因为我找不到将 n 的初始值存储到变量的方法。

例如,如果我用数字 7 调用函数,它是一个递归,所以n变成6then5等等,所以我不能gdc正确;例如1-7那么2 - 7那么3 -7。你知道我如何存储变量的值na

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)

标签: haskell

解决方案


使用辅助函数(通常称为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)

推荐阅读