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
但由于某种原因,当数字不在列表中时我会收到错误
答案 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成为你列表中的每个元素,一个接一个。