首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何递归编写乘法算法

如何递归编写乘法算法
EN

Stack Overflow用户
提问于 2020-05-31 20:15:14
回答 1查看 463关注 0票数 0

我开始了一门新的算法课程。这位教授正试图用其他规则创建一个乘法算法。

例如,他将我们试图乘的数字的数字分成两组。x = 3452然后是a = 34b = 52 (同样适用于y)。

据他说,基本行动是:

,如果给你两个数字,每个数字只有一个数字。然后,在一个基本操作中将它们相乘,并返回结果。

如果acadbcbd是非常简单的操作,您将如何递归地计算这些操作?

EN

回答 1

Stack Overflow用户

发布于 2020-05-31 21:06:02

下面是如何为karatsuba编写代码(用python编写)(假设x和y的偶数总是相同的):

代码语言:javascript
复制
def numDigits(x):
  """
  Returns the number of digits in x
  """
  if x == 0:
    return 1

  digits = 0
  while x >= 1:
    x = int(x / 10)
    digits+=1
  return digits

def multiply(x, y):
  x_digits = numDigits(x)
  y_digits = numDigits(y)

  if x_digits != y_digits:
    return -1                    # not valid

  n = x_digits

  if n == 1:                     # checks if x (and y) are only 1 digit
    return x*y                   # single digit multiplication

  half_n = int(n / 2)

  a = int(x / (10**half_n))
  b = x - (a*(10**half_n))
  c = int(y / (10**half_n))
  d = y - (c*(10**half_n))

  ac = multiply(a, c)
  ad = multiply(a, d)
  bc = multiply(b, c)
  bd = multiply(b, d)

  return (10**n)*ac + (10**half_n)*(ad + bc) + bd



assert multiply(1, 2) == 2
assert multiply(10, 20) == 200
assert multiply(15, 21) == 315
assert multiply(1710, 2450) == 4189500
print("all pass!")

您可以修改代码,允许x和y有奇数的数字,并具有不同的长度,需要做更多的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62121957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档