2

我正在学习 Java 2 课程并尝试学习,但我不明白这个概念:

  • 递归编程调用和动态编程调用有什么区别?

  • 每个的例子是什么?

4

4 回答 4

3

这两个概念是相当不同的:

  • 如果函数调用自身,则称为递归函数。

  • 动态规划是一种解决问题的技术。它涉及首先解决一个较小的子问题,然后将解决方案扩展到整个问题的解决方案。

动态规划算法通常可以递归表示。

于 2013-03-18T22:33:12.927 回答
2

递归解决方案以自上而下的方式解决问题,而动态解决方案以自下而上的方式解决问题,利用先前预先计算的子问题的最佳解决方案。并非总是可以执行动态规划,您需要确保子问题的最优解也是全局问题的最优解。

一个经典的例子是计算第 n 个斐波那契数:

-递归

Fib(n)
  if (n <= 2) return 1
  return Fib(n-1) + Fib(n-2)

-动态的

Fib(n)
 previous = 1
 next = 1
 temp = 0
 for i = 2 to n do
   temp = previous
   previous = next
   next = temp + next
 return next

这是一个伪代码,第一个重复调用,第二个基于以前的情况

于 2013-03-18T23:00:46.317 回答
1

“分而治之”概念算法被认为是动态和递归的,例如在列表/数组中排序,您将项目分成两部分并在每个部分中再次调用排序函数......等等

于 2013-03-18T22:39:48.050 回答
1

递归代码是调用自身的代码,动态代码是编程然后调用自身的代码。

我需要一些上下文来尝试弄清楚编写这门课程的人想说什么。动态代码可以是递归的,递归代码可以是动态的,所以我发现你的问题的意图令人困惑。

于 2013-03-18T22:45:18.143 回答