【发布时间】:2014-10-18 02:04:12
【问题描述】:
这是一个相当简单的请求,但我在使用 F# 的语法时遇到了问题。我需要创建一个函数来递归地迭代二维数组,每次满足条件时增加一个计数器。在这种情况下,该函数将 ID 作为参数,然后检查该 ID 在内部数组中出现的次数。我在想这样的事情:
let runner array count =
match count with
|0 -> (exit loop)
|n -> (perform function)
runner array count-1
对于递归迭代函数的一般结构。但是,有几件事我不确定。在 F# 中退出递归循环(即基本情况)的条件是什么?如何构造它以便遍历主数组和子数组以检查 ID?假设我不能使用可变函数,我该如何使计数器随着递归循环的每次运行而增加?任何帮助将不胜感激。
【问题讨论】:
-
“退出递归循环的条件是什么”。当您进入一个无法调用递归函数并返回一个值的分支时,这就是您的递归所能达到的程度。此时,如果函数是尾递归的,则您要么返回该值,要么有一个充满递归调用的堆栈,这些调用继续执行直到它们“折叠”成单个值。
-
“我怎样才能使计数器增加......”。这就是递归的全部意义所在。您可以构造函数,以便在下一个递归调用的位置有一个表达式,如
1 + runner array count-1,并且该表达式在您完成递归时计算,或者您将计数器作为函数的参数并将递增的计数器传递给下一个递归调用(这是使函数尾递归的必要步骤)。
标签: arrays recursion f# iteration