【问题标题】:Adding with Recursion递归添加
【发布时间】:2017-11-09 22:36:17
【问题描述】:

我正在尝试使用递归函数找到两个函数之间的和。到目前为止,这是我所得到的:

def add(a, b):
    if zero(a):
       return b
    if zero(b):
       return a
    else:
       return add(decr(a), incr(b))

zero(a):判断一个函数是否为0

decr(a):将 a 加 1 (a + 1) 的函数

incr(a):将 a 减 1 (a - 1) 的函数

在运行这个函数时,我得到了我正在寻找的答案, 例如,调用 add(5, 6) 确实给了我 11,我根本不明白它是如何得到这个答案的。换句话说,我完全是偶然得到的。 如果有人可以解释这里发生了什么,那将不胜感激。

【问题讨论】:

  • 真的,你只是把键盘捣碎了,正确的答案就出来了?你应该买彩票!
  • 一步一步来吧。
  • 您是否尝试过单步执行代码?使用调试器还是在纸上?
  • 那么我们是不是假装这不仅仅是一个家庭作业问题?这也不是一个很好的问题,因为如果a 为负数,它就不起作用。如果b 为正,则zero(b) 的条件永远不会为真。

标签: python-3.x function recursion


【解决方案1】:

在每一步中,您都将 a 减 1,并将 b 增加 1。 基本上你正在做的是将 a 分解为 (1 + 1 + 1 + ... + 1) 一次。

所以现在做的不是a + b,而是b + 1 + 1 + 1 + ... + 1 (a times)

【讨论】:

  • 所以如果我想将这个想法用于将两个数字相乘的函数,我会尝试使用相同的方法吗?例如 5, 6。所以我必须找到一种方法来做 b + 6 +6 +6 ... + 6(一次,在这种情况下为 5)。对吗?
猜你喜欢
  • 2011-11-03
  • 2021-03-21
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2016-07-18
  • 2020-05-28
相关资源
最近更新 更多