【问题标题】:Recursion to solve basic multiplication递归求解基本乘法
【发布时间】:2016-11-14 20:45:07
【问题描述】:

我应该编写一个函数来计算给定数量的狗需要的鞋子数量。它可以很容易地用乘法来完成,但是我们需要使用递归,所以我有

def dogShoes(n):
    total = 0
    if n>0:
        shoes =   n + dogShoes(n)
        total = total + 1
        if total == 4:
            return shoes

但我现在意识到第 4 行将走向无穷大,而我想阻止它的底部部分甚至不会实现。有没有办法说当total4 时,停止并返回答案而不使shoes 走向无穷大?

【问题讨论】:

  • 这是我见过的最奇怪的递归学习方法。
  • 你可以使用 for 循环吗?如果是这样,请这样做。
  • @ElliotRoberts “但我们需要使用递归”
  • 对,对不起。
  • This answer 回答类似的问题可能会帮助您更好地理解递归。

标签: python recursion jython multiplication


【解决方案1】:

你可以大大简化你的功能:

def dogShoes(n):
    if n == 0:
        return 0
    else:
        return 4 + dogShoes(n-1)

由于您必须使用递归而不是仅仅返回 n * 4,您可以简单地将乘法重写为加法(递归地)。

多么奇怪的任务……

【讨论】:

  • 您的代码不适用于this dog
  • @wim savage 评论很野蛮
  • @wim 好吧,回到绘图板上。我们需要更多的数学(或更多的腿)
【解决方案2】:

您递归调用函数,但从不更改参数,从而提供无限递归。试试:

>>> def dog_shoes(n):
...   if n > 0:
...     return 4 + dog_shoes(n-1)
...   else:
...     return 0
...
>>> dog_shoes(1)
4
>>> dog_shoes(2)
8
>>> dog_shoes(3)
12

【讨论】:

    【解决方案3】:
    def Mul(n, x):
    if n==1:
        return x
    else:
        return x+ Mul(n-1,x)
    

    这是一个使用两个参数的 Python 递归的简单乘法函数。

    Mul(3,3)
    >>>9
    

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多