-2
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 的值返回哪个值?(分别回答这两个功能的问题)...

在编程中,我们如何真正定义“终止”这个词?

4

1 回答 1

2

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

现在在您的特定情况下,这两个函数是递归函数,要知道递归函数是否会终止是检查“基本条件”(即递归函数不调用自身的条件)是否会永远遇见与否。

oops基本条件中a == 0,a 递减,因此如果您将 a as -1(或任何负数)传递给此函数,那么它将永远不会满足基本条件,因此永远不会终止。对于任何正数或零的 a ,它将终止。

同样,oopser如果您传递任何大于 a 的值然后 b 它将永远不会终止。当您通过小于 b 或两者相等的 a 时,它将终止。

于 2013-06-10T05:03:03.447 回答