这是我的算法课上的一个老作业问题。我有解决问题的办法,但即使经过多次尝试,我也无法理解如何朝着正确的方向思考以得出解决方案。
function h(N) {
if (N==1) return 3;
else {
sum = 1;
i = 0;
while (i < h(N-1))
sum = sum + i;
i = i + 1;
return sum;
}
}
据我说,由于 h(N-1) 在 while 循环中被重复调用,所以 while 循环应该运行与 h(N-1) 返回的次数一样多的次数。除此之外,while 循环中的函数调用 h(N-1) 也会发生很多次。因此,根据我的说法,我应该得到这样的东西:
T(N) = T(N-1)*H(N-1) + C*H(N-1) + D
其中
1. T(N) 是运行时间,
2. T(N-1)*H(N-1) 因为对 h(N-1) 的一次递归调用将占用 T(N-1) 并且因为它是每次进行比较时重新计算,它将被称为 H(N-1) 次。(其中 H(N-1) 是调用返回的值)
3. C*H(N-1) 是 while 循环内语句的运行时间(因为 while 循环运行 H(N-1)次。
我没有从教授那里得到满意的答案,如果有人能帮助我理解这一点,我将不胜感激。
谢谢!