繁体   English   中英

如何从以下递归 python 程序中排除零

[英]how can I exclude zero from an recursion python program following

def multipl_rec(l, n):
    if (n == 1) and (n!=0):
        multiple = l[0]
    else:
        multiple = multipl_rec(l,n-1) * l[n-1]
    return multiple

如果我进入,我会得到

>>>l = [1,-2,5,0,-5]
>>>multipl_rec(l, len(l))
0

但我想得到 50 具有相同的值,为此我需要排除 0

对于初学者来说, n的这种用法有点令人困惑。 它唯一的工作是指示列表的虚拟结尾,通过简单地截断列表并完全省略n作为单独的参数来替换它会更容易:

def multipl_rec(l):
    if len(l) == 1:
        multiple = l[0]
    else:
        multiple = multipl_rec(l[:-1]) * l[-1]
    return multiple

接下来,您可以讨论到底要如何省略0值; 试图在递归 function 中跳过它们会使事情变得有些复杂,所以让我们将任何0替换为1

def multipl_rec(l):
    if len(l) == 1:
        multiple = l[0] or 1
    else:
        multiple = multipl_rec(l[:-1]) * (l[-1] or 1)
    return multiple

为了减少冗余,让我们将基本情况不是len(l) == 1 ,而是len(l) == 0

def multipl_rec(l):
    if not l:
        return 1
    return multipl_rec(l[:-1]) * (l[-1] or 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM