这个递归函数重复多少次?

时间:2017-07-27 11:07:35

标签: recursion iteration proof

我有一个递归函数,如下所示,其中b> = 0

def multiply(a,b):
    if b == 0:
        return 0
    elif b % 2 == 0:
        return multiply(2*a, b/2)
    else:
        return a + multiply(a, b-1)

我想知道函数在a和b 方面运行多少次。 感谢。

2 个答案:

答案 0 :(得分:1)

If binary representation of b (call it B) ends with 1, like xxxx1 than next call to multiply has B = xxxx0.

If B ends with 0, like xxxx0 than next value of B is xxxx.

With that, digit of binary representation of b adds one call if it is 0, and two calls if it is 1. Summing that total number of calls equals to length of initial B + number of ones in initial B.

答案 1 :(得分:0)

我可能在这里错了,但我认为你的功能不像你想要的那样工作。在递归中最重要的是作为一个propper结束标准,因为它将永远运行。

现在您的结束条件为a==0,但每次递归调用都不会减少。只需制作一支笔& a = 5的纸模拟并检查它是否会在任何点停止。