Recursion 时间复杂度:这两个代码的时间复杂度是否相同?

Recursion 时间复杂度:这两个代码的时间复杂度是否相同?,recursion,time-complexity,Recursion,Time Complexity,我正在读一本叫《破解密码访谈》第六版的书。关于时间复杂性,有一个递归运行时的示例代码(第44页): intf(intn){ 如果(n执行一个函数两次并不等于将该点的函数值乘以2。将函数执行视为正在执行的两条指令 所以当你这样做的时候: return f(n-1) + f(n-1) //In your definition of f(n) 要计算f(n),f(n-1)需要计算两次。然后要计算f(n-1),f(n-2)需要依次计算两次。因此,执行调用以树的形式增长,在每个级别上相乘两次。在图形格

我正在读一本叫《破解密码访谈》第六版的书。关于时间复杂性,有一个递归运行时的示例代码(第44页):

intf(intn){

如果(n执行一个函数两次并不等于将该点的函数值乘以2。将函数执行视为正在执行的两条指令

所以当你这样做的时候:

 return f(n-1) + f(n-1) //In your definition of f(n)
要计算
f(n)
f(n-1)
需要计算两次。然后要计算
f(n-1)
f(n-2)
需要依次计算两次。因此,执行调用以树的形式增长,在每个级别上相乘两次。在图形格式中类似于此:

但是,在您的第二个定义中,其中:

return 2 * f(n-1) //In your definition of f(n)
为了计算
f(n)
,我们只计算
f(n-1)
一次,然后将其与2相乘,这不会影响程序的总体复杂度,即数值
n
。请注意,我们没有保存
f(n-1)
f(n-2)的中间值
anywhere,这就是为什么我说每次都会计算它们,否则情况会有所不同。因此,在您的情况下,程序的进展如下:

尝试再次浏览函数定义,并根据每次迭代执行的指令将它们形象化。你会在脑海中看到两幅相似的画面


希望它能让你从正确的方向开始。

你能给那本书提供详细信息吗?检查
graphviz
可能是你的朋友,可以很容易地在任何时间可视化任何类型的树结构
 return f(n-1) + f(n-1) //In your definition of f(n)
return 2 * f(n-1) //In your definition of f(n)