递归中的真但假

我想计算我的数组中是否有k相同的连续数字例如,如果我们想检查是否有(k=)3连续数字,该函数将返回:


[0,0,1,1,1,3,4,5,4,3] = true

[0,0,1,2,1,3,4,5,4,3] = false

我写


def seq(a, n, k):

    if n == 1:

        return 0

    if k <= 1:

        return 1

    return (a[0] == a[1] and seq(a[1:], n-1, k - 1)) or seq(a[1:], n - 1, k)`

但是当我调用 (seq(array, len(array), 3)) 为 [2, 0, 0, 2, -4, -4, 0, 5, 0, 65, 66, 67] 返回 1 而不是 0


月关宝盒
浏览 90回答 1
1回答

慕码人2483693

看起来你正在搞砸你必须拥有的东西作为你的积累器。你应该积累的是你看到的最后一件事,以及你看到它的次数。其中等于我们正在检查的列表,是我们看到该元素的次数,并且是我们必须达到的连续元素的数量。anekdef seq(a, k):&nbsp; &nbsp; def seq_acc(a, n, e, k):&nbsp; &nbsp; &nbsp; &nbsp; if not a:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return n == k&nbsp; &nbsp; &nbsp; &nbsp; if n == k:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return True&nbsp; &nbsp; &nbsp; &nbsp; if e == a[0]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return seq_acc(a[1:], n+1, e, k)&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return seq_acc(a[1:], 1, a[0], k)&nbsp; &nbsp; if not a:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; return seq_acc(a[1:], 1, a[0], k)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python