我试过下面的问题,但我不确定我是否正确。我已经得出结论,它是一个n^2函数的大θ。我的推理是i和j的内部2个循环相当于一个操作序列,0、1、2、3、4、5….x-1,可以通过算术运算转换成(x*x-1)/2。但是,外部递归调用有点让我绊倒了。我很想把外部递归调用看作是另一个while循环,但我把它打退了,因为它不是另一个while循环或for循环,因为x也会改变。有人能帮我更好地理解下面的问题吗?在
def foo(x):
if x < 1:
return 'boo'
for i in range(x):
for j in range(i):
return foo(i + j)
return foo(x-1)
修订版:我刚刚在python解释器中运行了这段代码,结果发现这是一个固定时间,因为这是一个技巧问题。原因是,return语句只计算foo(1),然后不管n的大小,都会输出“boo”。在
但是--->;如果我将我的代码改为以下代码呢。运行时间现在是θ(n^2)还是θ(n^3)?在
^{pr2}$
编辑:首先有},所以现在我的答案是错误的。在
i+i
的问题,但现在有了{当
x < 1
它会打印“boo”—没有什么有趣的。在当
x >= 1
时,你可以到达循环所以让
^{pr2}$x = 1
你就有了所以让
i = 0
-然后你它将更新运行
所以让
i = 1
-然后你对于
j = 0
,您可以运行然后回到这个描述的开头。
你将再次得到
return foo(2)
。你自己查一下。在所以对于'x>;=1',你总是得到
return foo(2)
。所以你可以把代码减少到
(您将永远无法到达
return foo(x-1)
)你有无穷的功能。在
(希望我是对的)
相关问题 更多 >
编程相关推荐