【发布时间】:2019-12-20 11:26:07
【问题描述】:
当一个返回命令有两个递归调用时,例如
return fib(n-1) + fib(n-2);,是两个调用同时执行,还是fib(n-1)在fib(n-2)之前执行?
通过使用记忆,时间复杂度降低到 O(n),但不是只有在 fib(n-1) 在 fib(n-2) 之前执行(然后使用存储值)才有可能吗?
*public int fib(int n)是一种使用递归计算第N个斐波那契数的方法。
【问题讨论】:
-
评估顺序为 LTR。对记忆无关紧要;该值要么存在于缓存中,要么不存在。提示:
fib(n-1)下一步调用什么?此外,解决斐波那契的记忆是缓慢的、低效的、过于复杂的,并且由于许多其他原因是一个 Bad Idea TM。 -
什么是 LTR?但是,对于要显示的值,它必须事先计算(因为 fib(n-1) 调用 fib(n-2),当使用 memoization 并且不再计算 fib(n-2) 时)。我正在尝试以这种方式解决它,因为我正在练习动态编程,而任何其他问题对我来说似乎都太难/太模糊了。
标签: java recursion dynamic-programming memoization