需要了解棒切割问题中递归的发生方式。
以下是代码段:
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循环中使用时,递归树的外观如何?
答案 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)
我在这里滥用了一些符号(这更像是你用来寻找大的复杂性)。 +
在这种情况下实际上并没有添加任何东西,只是表明这些调用是在调用堆栈的同一级别进行的(相同的递归深度)
通过这种关系绘制一棵树应该很容易