【发布时间】:2021-02-13 02:40:21
【问题描述】:
我为“破解编码面试”中的以下问题提出了这个解决方案,我认为它比我在他们的解决方案中看到的更快、更优雅,但不确定它是否适用于所有情况。谁能告诉我是否遗漏了一些边缘案例?
CTCI 的原始问题是(关于递归和动态规划的问题 8.5):
编写一个递归函数以在不使用 * 运算符的情况下将两个正整数相乘。您可以使用加法、减法和位移,但应尽量减少这些操作的数量。
我的解决办法是:
def foo(a, b, mult = 0):
if a == 0 or b == 0:
return 0
if (a & 1) == 1:
return (b << mult) + foo(a >> 1, b, mult + 1)
return foo(a >> 1, b, mult + 1)
谁能告诉我是否遗漏了什么?
【问题讨论】:
-
我不会过多介绍建议的解决方案。该代码的作者甚至把第一个幼稚的实现弄错了:D
标签: python recursion bit-manipulation