【问题标题】:Stackoverflow with recursive function具有递归函数的 Stackoverflow
【发布时间】:2013-04-27 02:15:53
【问题描述】:
let rec f a p n = if p n then a else a + f a p ( n - 1 )
let a, p, n = 3, ( fun x -> x = 1 ), 4
f a p n

当 n

【问题讨论】:

  • 试图在这里建立代表。为什么投反对票?

标签: recursion f# stack-overflow


【解决方案1】:

您的 p = fun x -> x = 1 当然会检查 x 是否为 1。

您的递归调用在n 上使用p,否则递减n

这将导致 n 变得越来越负,导致无限递归,因为 n 永远不会是 1。要解决此问题,您无需调用 p 的值小于 1 的 n 或更改您的检查除了检查值 1 之外的功能。

不妨试试let a, p, n = 3, ( fun x -> x <= 1 ), 4

【讨论】:

  • 还值得注意的是,如果 f 被设为尾递归,那么代码将按原样使用 p “工作”(即不会崩溃),因为 n 最终会下溢并且从Int32.Max倒数到1
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多