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的值? (单独回答两个职能部门的问题)......
在编程中,我们如何实际定义“终止”一词?
答案 0 :(得分:2)
非终止意味着你调用一个函数,该函数永远不会返回一个值,你会一直等到永恒。现在你可以决定什么是永恒;)。
现在在你的特定情况下,2个函数是递归函数,并且知道递归函数是否将终止是检查“基本条件”(即递归函数不调用自身的条件)将永远得到满足。
在oops
中,基本条件为a == 0
,并且在递归中a递减,因此如果将-1
(或任何负数)传递给此函数,则它将永远不会满足基数条件因此永远不会终止。它将终止任何正数或零的数据。
同样在oopser
中,如果你传递任何大于b的值,它将永远不会终止。当你传递小于b或两者相等时,它将终止。