我目前正在学习递归函数,我已经部分地解决了这个问题。
例如,如果输入为[4,4,3],则输出应为true。连续元素必须至少与前一个元素一样大。
这是我的代码:
def descending(l):
x=0
if len(l)==0 or len(l)==1:
return True
for value in range(0,len(l)):
if l[value]>=l[value]+1:
x=l[value]+1
descending(l[x:len(l)])
return True
else:
return False
让我知道为什么我的逻辑在某些情况下会失败。
答案 0 :(得分:2)
如果你希望这个函数是递归的,它应该是这样的:)
def descending(l):
if len(l) <= 1 or (len(l) == 2 and l[0] >= l[1]):
return True
else:
if l[0] >= l[1]:
return descending(l[1::])
else:
return False
答案 1 :(得分:2)
如果你想使用递归,你可以这样做:
def foo(l):
if len(l) <= 1:
return True
f, *l = l
return False if f < l[0] else foo(l)
但我强烈建议你不要使用递归来解决这类问题。
对语法的一点评论:f, *l = l
会将f
设置为l
的第一个元素,并将l
设置为l的一部分,它与:{{1}相同}
答案 2 :(得分:1)
对我来说,代码的关键失败是redux
返回一个值,但是当你以递归方式调用它时,你会忽略它的返回值!
我不确定以前哪个答案比其他答案更多 Pythonic ,但我不喜欢他们的风格。我首先要清楚地列出你的基本情况,然后以递归结束:
descending()
我还有一个针对 return-else-return 逻辑的个人挂断:
def descending(array):
if len(array) <= 1:
return True
if array[0] < array[1]:
return False
return descending(array[1:])
VS。简单地:
if x:
return a
else:
return b
答案 3 :(得分:1)
def decreasing(l):
if l==[] or len(l) == 1:
return(True)
else:
return( decreasing(l[1:]) if l[0] > l[1] else False)
答案 4 :(得分:0)
我认为你的代码有效,但它可能很容易变得更加pythonic。
def descending(l):
if not l or len(l) == 1:
return True
elif l[0]>=l[1]:
return descending(l[1:])
else:
return False