使用递归

时间:2016-11-20 22:50:29

标签: python list recursion

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

但由于某种原因,当数字不在列表中时我会收到错误

3 个答案:

答案 0 :(得分:1)

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

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

您也可以不使用索引参数:

var MapView = require('react-native-maps');

class Map extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
    }
  }

  render() {
    return (
      <View style={styles.container}>
        <MapView style={styles.map}
          initialRegion={{
              latitude: 37.78825,
              longitude: -122.4324,
              latitudeDelta: 0.0,
              longitudeDelta: 0.0,
          }}
        />
      </View>

    );
  }
};


var styles = StyleSheet.create({
 container: {
   flex: 1,
   justifyContent: 'center',
   alignItems: 'center',
   backgroundColor: '#F5FCFF',
 },
   map: {
     position: 'absolute',
     top: 0,
     left: 0,
     right: 0,
     bottom: 0,
   }
});

答案 1 :(得分:0)

我并不完全理解你在做什么,但这是递归和迭代的奇怪组合。如果您要使用递归,那么至少对于像这样的基本递归问题来说,这是值得的,以避免迭代。试试这样的事情

i

此解决方案可以完美地运行并且是尾递归的,因此它可以快速,最佳地工作。

它的工作方式是检查索引False是否超出范围。如果是,则返回x[i]。如果它在边界内,则检查True是否等于该数字。如果是,则返回check。如果不是,则返回IP_1/MASK IP_2 NUM [NET_1 NET_2 NET3 ... NET_NUM],索引增加,因此递归有效。

答案 2 :(得分: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个是什么,虽然没有第6个元素,因此错误。您必须检查列表是否包含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))

你所做的只不过是一个过度的,递归的for-Loop。你只需要增加i并进行比较,直到找到元素或者i大于列表长度。所以这相当于

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

非常重要的是return False在for-Loop之后,因为你只返回,如果你没有找到该元素,即使在迭代整个列表之后也是如此。

你也可以避免索引。使用for-Loop,您可以直接遍历列表中的元素:

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

这使得变量elem成为你列表中的每个元素,一个接一个。