在循环中使用递归时如何展开?

时间:2017-03-12 06:53:50

标签: c recursion tree

需要了解棒切割问题递归的发生方式。

以下是代码段:

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循环中使用时,递归树的外观如何?

1 个答案:

答案 0 :(得分:2)

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

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)

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

通过这种关系绘制一棵树应该很容易