【发布时间】:2018-11-13 00:45:02
【问题描述】:
这个问题参考以下代码:
cost = [[1, 10, 75, 92],
[-1, 0, 35, 50],
[-1, -1, 0, 80],
[-1, -1, -1, 0]]
def min_cost(source, destination):
if s==d or s == d-1:
return cost[s][d]
mc = cost[s][d]
for i in range(s+1, d):
tmp = min_cost(s, i) + min_cost(i, d)
if tmp < mc:
mc = tmp
return mc
当我进行相同的试运行时,我看到 min_cost(1,3) 被执行了两次。我在一本书中读到,作者提到如果我们之间有 10 个站,那么 min_cost(1, 3) 将运行 144 次。
我们如何在不实际进行试运行的情况下计算出这些数字?我知道使用递归方程我们可以计算出函数所花费的时间,但是我们怎么能说一个特定的函数会被执行这么多次呢?
【问题讨论】:
-
艾伦·图灵和哥德尔已经证明,如果不执行某个代码,您无法知道某个函数的执行次数。这个问题类似于 Halting 问题,即你无法提前知道程序在执行过程中是否会停止。 en.wikipedia.org/wiki/Halting_problem
标签: algorithm recursion analysis