使用递归计算列表中数字的出现次数

RRR*_*RRR 3 python recursion

我正在做的任务是:

给定一组int,递归计算值11出现在数组中的次数.我们将使用仅考虑从给定索引开始的数组部分的约定.通过这种方式,递归调用可以传递索引+ 1以向下移动数组.

我需要递归地做这件事.我对此很陌生,但我在技术上使它成功了.我有以下内容:

def array11(arr, index, cnt=0, num=0):
    if(cnt==len(arr)-index):
        print("yay!!! number 11 appears %d times"%num)
        return
    elif(arr[index:][cnt]==11): 
        num+=1
        cnt+=1
        array11(arr,index,cnt,num)
    else: 
        cnt+=1
        array11(arr,index,cnt,num)
Run Code Online (Sandbox Code Playgroud)

但我觉得我通过添加默认值的"cnt"和"num"参数,出于某种原因便宜了.我只是不知道如何在没有计数器的情况下通过"arr"阵列!

所以这可以接受吗?你会以同样的方式做到吗?

提前致谢

Mar*_*ers 5

您通常会返回总计数:

def array11(arr, index):
    if index == len(arr):
        return 0
    return (arr[index] == 11) + array11(arr, index + 1)
Run Code Online (Sandbox Code Playgroud)

我在这里使用一个小Python技巧,其中bool是一个子类,int并且True等于1.因此,加上布尔值(或布尔值和整数)会导致布尔值被解释为整数.

print然后你就可以在最外面的回调中使用array11().

  • 那个加法不链?`array11([11,2,3],0)`会产生`1 + array11([11,2,3],1)` - >`1 + 0 + array11([11,2,3],2 )` - >`1 + 0 + 0 + array11([11,2,3],3)` - >`1 + 0 + 0 + 0` =`1`对吗? (2认同)
  • +1你可能想在你的布尔表达式周围抛出括号,以使它更清楚你正在做什么 (2认同)