【问题标题】:How does recursion unfolds when used inside a loop?在循环中使用递归时如何展开?
【发布时间】:2017-08-02 08:22:13
【问题描述】:

需要了解递归切杆问题中是如何发生的。

这里是sn-p的代码:

int cutRod(int price[], int n)
{
   if (n <= 0)
     return 0;
   int max_val = INT_MIN;

   for (int i = 0; i<n; i++)
       max_val = max(max_val, price[i] + cutRod(price, n-i-1));

   return max_val;
}

在 for 循环中使用递归树会是什么样子?

【问题讨论】:

  • 我在这里看不到递归。请尝试创建一个Minimal, Complete, and Verifiable Example。在编辑时,请添加语言标签。
  • 但是,理解递归的一个好方法是在调试器中单步执行代码,同时将其映射到纸上。
  • 对@Someprogrammerdude 感到抱歉!我已经更新了问题..
  • 与没有循环的情况相同,只是它发生了 n 次。

标签: c recursion tree


【解决方案1】:

考虑它的递归关系会很有帮助。在这种情况下,它有点棘手,因为输入的大小在每个递归调用中都不同。在这种情况下,您可以使用:

T(n) = T_1(n-1) + T_2(n-2) + ... T_n(0)

例如 T(5) = T(4) + T(3) + T(2) + T(1) + T(0)

我在这里有点滥用符号(这更符合您用来查找大的哦复杂性的方法)。 + 在这种情况下实际上并没有添加任何东西,而是表明这些调用是在调用堆栈的同一级别进行的(相同的递归深度)

不过,从这个关系中画一棵树应该很容易

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2017-01-28
    • 1970-01-01
    • 2016-10-27
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多