2016-11-20 55 views
-2
def check(x,num,i): 
    for n in range(len(x)): 
     if x[i] == num: 
      return True 
     else: 
      return(check(x,num,i+1)) 
    return False 
def User(x,num): 
    return(check(x,num,0)) 

用户出现在列表中的一个元素([2,6,1,9,7,3],5,0) 这应该掉,因为5把假是不在列表检查是否使用递归

检查是否在列表中出现的元素递归

所以例如:

输入:从键盘列表L读出,例如L = [2,6,1,9,7,3 ] 元素e,例如e = 9

但出于某种原因,我得到一个错误,当数不在列表

+1

这应该不起作用。 'range(len(x) - )'语法无效。 –

+0

请[编辑]你的问题,并包括错误的追踪,以便我们可以帮助你找到并消除问题! – MSeifert

+0

仅供参考:您可以使用'num in x'来检查'num'是否包含在列表'x'中。 (不递归但肯定更高性能)。 – MSeifert

回答

1

递归的美丽(和目的)是你做需要循环:

def check(x, num, i): 
    if not x[i:]: # index past length 
     return False 
    if x[i] == num: 
     return True 
    return(check(x, num, i+1)) 

你也可以没有索引参数:

def check(x, num): 
    if not x: 
     return False 
    return x[0] == num or check(x[1:], num) 
+0

不起作用 – adam

+0

check([2,6,1,9,7,3],5,0)它应该输出false,因为它不在列表中。但是,你得到一个错误 – adam

+0

谢谢,但你能解释什么“如果不是x [我:]”这检查? – adam

0

我不完全明白你在做什么,但这是一个递归和迭代的奇怪组合。如果你要使用递归,至少对于像这样的基本递归问题来说,这是值得的,以避免迭代。尝试像这样

该解决方案将工作得很好,是尾递归,因此它将快速和优化地工作。

它的工作方式是检查索引i是否超出范围。如果是这样,那么它返回False。如果它处于界限内,则检查x[i]是否等于该数字。如果是,则返回True。如果不是,则返回check,索引增加,因此递归有效。

0

首先,您的for循环没有任何意义。你永远不会使用那个n,并且永远不会再次进入循环,因为你总是在第一次迭代中返回一些东西。之后的for循环的return语句也无法访问,因此您的代码可以作为不失为

def check(x,num,i): 
    if x[i] == num: 
     return True 
    else: 
     return(check(x,num,i+1)) 

那么实际的问题是,如果你有5个元素,例如,它不包含该元素搜索列表因为,你问第六个是什么,虽然没有第六个元素,所以错误。你必须检查列表是否包含6个元素。所以你检查它是否超过5个,如果是的话返回false,如果没有则返回。 (或者,您也可以在整体功能开始检查)

def check(x,num,i): 
    if x[i] == num: 
     return True 
    else: 
     if len(num)>i: 
      return False 
     else: 
      return(check(x,num,i+1)) 

你所做的则不过是overcomlicated,递归的for循环。你只需增加i并进行比较,直到找到该元素或i大于列表长度。因此,这相当于

def check(x,num): 
    for i in range(len(num)): 
     if x[i]==num: 
      return True 
    return False 

这是非常重要的return False是在for循环,因为你只退货,如果没有找到元素,甚至遍历整个列表之后。

你也可以避免指数。随着一个for循环可以直接遍历元素的列表:

def check(x,num): 
    for elem in num: 
     if elem==num: 
      return True 
    return False 

这使得变量ELEM成为每一个元素在你列出,此起彼伏。

+0

第二个不起作用 – adam

+0

oops,换了第二个if/else语句。固定。 – PattuX