class Tower {
public void moveDisks(int n, Tower Destination, Tower Buffer) {
if (n > 0) {
moveDisks(n-1, Buffer, Destination);
moveTopto(Destination);
Buffer.moveDisks(n-1, Destination, this);
}
}
}
以下是我上面提到的方法的代码。这是解决经典河内塔问题的算法的一部分。由于它有相当多的递归,我只能无法解决时间复杂问题。
这是班级Tower
内的一种方法。 moveTopto
为O(1)
,因此不应影响运行时。
答案 0 :(得分:2)
这取决于moveTopto
和buffer.moveTopto
的时间复杂度。
基本上要计算复杂性,您需要增加时间。 n
的时间将是n-1
的时间加上moveTopto
的时间加上buffer.moveTopto
的时间加上常量。现在您看到它至少会有O(N)
,但可能会更高,特别是如果buffer.moveTopto
具有非恒定的时间复杂度。
如果您的意思是Buffer.moveTopto
,那么n-1
的时间大约是时间的两倍,那就是t(n) = 2*t(n-1)+constant
。这给了O(2^n)
。
答案 1 :(得分:1)
递归算法复杂性分析的良好解释 Video Tutorial
PS。如果你懒得打开链接并理解并且只想要答案 - 复杂性~O(2 ^ n)