【发布时间】:2022-06-22 16:23:13
【问题描述】:
谁能帮我解决这个问题?
【问题讨论】:
-
O(log(z))在每个递归调用中将z除以2
谁能帮我解决这个问题?
【问题讨论】:
O(log(z)) 在每个递归调用中将z 除以2
让我们看看。有一个方法(让它成为 C#)
static int Mult(int y, int z) {
if (z == 0)
return 0;
else if (z % 2 != 0)
return Mult(2 * y, z / 2) + y; // Note z / 2
else
return Mult(2 * y, z / 2); // Note z / 2
}
我们可以看到,在每个递归调用中,我们将z除以2,例如
Mult(7, 10) ==
Mult(14, 5) ==
Mult(28, 2) + 14 ==
Mult(56, 1) + 14 + 56 ==
Mult(112, 0) + 14 + 56 ==
0 + 14 + 56 == 70 # multipliction indeed: 7 * 10 == 70
注意z如何变化:10 -> 5 -> 2 -> 1 -> 0,所以递归调用的次数是log(z),我们有O(log(z))的时间复杂度。
【讨论】: