我有一个递归函数,如下所示,其中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 方面运行多少次。 感谢。
答案 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的纸模拟并检查它是否会在任何点停止。