我有这个考试题目:
看看这个伪代码的例子:
algorithm A(a, b) {
// precond: a & b are type of Int
// postcond: what does this function return?
if (a == b)
return( 0 )
else if (a < b)
return (-A(b, a))
else
return (A(a-1, b-1));
}
给出的答案是:
我个人认为这是d),但我只想确定。
答案 0 :(得分:1)
该函数在a==b
时终止;为了表明它没有终止,你可以证明一个&amp; b永远不会与连续的电话接近 - 在这种情况下,这很容易。
(上面没有考虑溢出。另外,(d)不能正确,因为它根本不会循环。)
答案 1 :(得分:1)
只要a和b不相等,
如果a小于b,则下一个函数调用将生成&gt; b。 (例如,调用A(3,4)将返回-A(4,3))
随后,函数调用将导致无限递归,因为它不会终止返回A(a-1,b-1)。 (例如,调用A(4,3)将返回A(3,2),它将返回A(2,1),依此类推)
答案 2 :(得分:-1)
函数返回的唯一值是0.而且当a == b时。但是,0 = a - b表示所有(a,b),因此a == b。所以我认为正确的答案是a)。