【问题标题】:Recursion function to count how many times a certain sequence appears递归函数来计算某个序列出现了多少次
【发布时间】:2020-06-03 02:35:26
【问题描述】:

我正在编写一个以整数作为输入的递归函数,它将返回 123 在整数中出现的次数。

例如:

打印(一二三(123123999123))

将打印出 3,因为序列 123 在我输入函数的数字中出现了 3 次。

到目前为止,这是我的代码:

def onetwothree(x):
    count = 0
    while(x > 0):
        x = x//10
        count = count + 1
    if (count < 3):  #here i check if the digits is less than 3, it can't have the sequence 123 if it doesn't have 3 digits
        return 0
    if (x%10==1 and x//10%10 == 2 and x//10//10%10==3):
        counter += 1
    else:
        return(onetwothree(x//10))

这会一直打印“0”。

【问题讨论】:

  • 它一直打印0,因为你的while循环将x设置为0,然后调用onetwothree(0),当然是0
  • @MarkSnyder 所以我删除了该部分,然后它说超出了最大输出递归。
  • 您的代码没有多大意义。使用铅笔和纸(或 IDE 的调试器)逐行查看它的实际作用。
  • 你明白x = x//10实际上改变了x的值吗?
  • @PM77-1 它检查第一个数字是否为 1,然后第二个数字为 2,然后第二个数字为 3,如果它向计数器添加一个,则通过该函数将新数字放回。跨度>

标签: python function if-statement recursion methods


【解决方案1】:

我认为你在考虑递归。这样的解决方案应该可以工作:

def onetwothree(n, count=0):
    if n <= 0:
        return count

    last_three_digits = n % 1000
    n_without_last_number = n // 10

    if last_three_digits == 123:
        return onetwothree(n_without_last_number, count + 1)
    else:
        return onetwothree(n_without_last_number, count)

print(onetwothree(123123999123))

输出:

3

【讨论】:

  • 当然。确保您了解上述解决方案的工作原理。这相当简单,但正如我所说,我认为你过度思考如何递归地解决这个问题。不确定为什么响应中的 -1。
  • 我还应该补充一点,这个解决方案适合所有边缘情况。输入一个负数,您会看到它不会返回您的预期计数。也许这是您可以考虑添加的内容;)
  • absolutley 我祝你最好的兄弟。谢谢你 1000x 你帮了我很多
  • 没问题 -- 最后一点,请记住 // 是整数除法,而 / 不是 -- 记住这一点很重要。
【解决方案2】:

如果您想计算一个数字中出现了多少次“123”,为什么不将您的数字从整数转换为字符串并使用str.count

那么你的函数应该是这样的:

def onetwothree(x):
    return str(x).count('123')

但它也不再是递归的了。

您也可以只使用 print(str(123123999123).count('123')) 行,这与使用 onetwothree 函数几乎相同。

我希望这个答案有帮助:)

【讨论】:

  • @FreelanceVideoandPhotoEdit 这里没有递归的地方。
  • 是的,如果我在这里误解了一些东西,很抱歉,但我同意@lenik,我在这里看不到任何递归的地方。
  • @lenik 不是这个解决方案,我想要一个递归解决方案来解决我的问题。 ik 这个解决方案不能递归
  • @lenik 太棒了,可以更粗鲁一点吗?
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2021-10-10
  • 2023-03-11
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
相关资源
最近更新 更多