当函数终止时

时间:2013-06-10 04:28:48

标签: haskell terminate

oops :: Integer -> Integer -> Integer
oops a b
   | a == 0 = b
   | otherwise = oops (a - 1) (b + 1)

oopser :: Integer -> Integer -> Integer
oopser a b
   | a == b = b
   | otherwise = oopser (a + 1) (b - 1)

对于哪个值a和b,上述两个函数将终止?如果函数终止,则返回哪个值相对于a和b的值? (单独回答两个职能部门的问题)......

在编程中,我们如何实际定义“终止”一词?

1 个答案:

答案 0 :(得分:2)

非终止意味着你调用一个函数,该函数永远不会返回一个值,你会一直等到永恒。现在你可以决定什么是永恒;)。

现在在你的特定情况下,2个函数是递归函数,并且知道递归函数是否将终止是检查“基本条件”(即递归函数不调用自身的条件)将永远得到满足。

oops中,基本条件为a == 0,并且在递归中a递减,因此如果将-1(或任何负数)传递给此函数,则它将永远不会满足基数条件因此永远不会终止。它将终止任何正数或零的数据。

同样在oopser中,如果你传递任何大于b的值,它将永远不会终止。当你传递小于b或两者相等时,它将终止。