给出的代码如下:
public static int countDP(int n, int[] map) {
if (n<0)
return 0;
else if (n==0)
return 1;
else if (map[n]>-1)
return map[n];
else {
map[n] = countDP(n-1, map) + countDP(n-2, map) + countDP(n-3, map);
return map[n]; }
}
我懂得C和C ++,但不懂JAVA。这段话来自《破解编程面试》一书。 有人能解释一下:
为什么要在这里使用函数map? map在这里是数组吗?
我没有看到任何一行将输入保存到map数组中,但它如何返回结果?
有人知道这段代码的C ++或C版本吗?很难理解这段代码。也许不是因为JAVA语法,而是动态编程的隐式结构。
这个算法的时间复杂度是多少?应该小于O(3^n) 吧?
谢谢大家
int
数组。C
和C++
添加到标签中。