微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有While循环的Python递归并在不使用%operator的情况下找到x / y的余数?

如何解决没有While循环的Python递归并在不使用%operator的情况下找到x / y的余数?

不知道出了什么问题,它没有给出输出,我正在考虑在语句中放入“ remainder(x-y,y)”,但仍然无法正常工作。

def remainder(x,y):
  if x == y:
    return 0
  elif x>y:
    x = x-y
    if x<y:
      return x

x=int(input("x: "))
y=int(input("y: "))
print (f'Remainder: {remainder(x,y)}')

解决方法

您需要调用函数以执行递归

def remainder(x,y):
  if y==0: # check to avoid infinite loops
    return float("Nan")
  if x>=y:
    return remainder(x-y,y)
  else: # base case
    return x
, 根据定义,

“递归”意味着您的函数在某个时候调用自身。到目前为止,您还没有。考虑一组函数的输入流程-例如x=22y=7,然后遍历每个语句以查看其作用。通常,这有助于调试。

在设计递归函数时,通常最简单的方法是从您要做的递归操作开始(在这种情况下,从y中减去x)。然后,问什么是基本情况-在什么情况下无法再次发生?在这种情况下,如果从y中减去x,则会使结果低于零。换句话说,如果y大于x。然后,剩下的功能只是设置为调用自身,然后调用自身。

在这种情况下,您实际上想通过递归实现模数的操作更简单:

def remainder(x,y):
  # base case
  if y > x:
    return x 
  # recursive case
  return remainder(x-y,y)

函数的每次迭代都从y中减去另一个x,直到y大于x,此时将返回任何x作为其余的。

请注意,这显然不适用于负数。

,

您也可以使用此答案,而无需递归。

def remainder(x,y):
    ans = x/y
    rem = y * (ans-int(ans))
    return round(rem)

remainder(132,7)

会给你 6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。