检查伪代码递归函数

时间:2014-06-24 16:16:12

标签: pseudocode

我有这个考试题目:

看看这个伪代码的例子:

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));
}

给出的答案是:

  • a)a-b
  • b)a + b
  • c)max(a,b)
  • d)无限循环

我个人认为这是d),但我只想确定。

3 个答案:

答案 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)。