对不起,如果这张贴在其他地方(我找不到任何东西,因为我的问题比较具体),但我理解(或者至少在理论上)错误是什么;我在如何修复它时遇到了麻烦。该代码应该显示合并排序的工作原理;代码运行,但它永远不会命中函数调用" merge" (下面的代码,我知道在进口中调用所有内容都是不好的做法,但它不是主要的项目,所以我不在乎;也许它只是预览,但它是用java编写的。 util。;并导入java.security。;)。
renderList = (dataObj,sectionID,rowId) => {
return (
<View style={styles.container}>
<Row damping={this.state.damping} tension={this.state.tension} onPress={()=>this.deleteItem(rowId)}>
<View style={styles.rowContent}>
<View style={styles.rowIcon} />
<View>
<Text style={styles.rowTitle}>{dataObj.service}</Text>
<Text style={styles.rowSubtitle}>Drag the row left and right</Text>
</View>
</View>
</Row>
</View>
);
};
render() {
return (
<ListView
renderSectionHeader={() => this.renderSectionHeader()}
key={this.state.dataBlob}
dataSource={this.state.dataSource}
renderRow={(data, sectionID, rowID) => this.renderList(data, sectionID, rowID)}
style={styles.listView}
renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
/>
);
}
}
如果您需要驱动程序文件,请告诉我。重申一下,问题是它永远不会到达合并函数调用并导致Stack Overflow错误。
答案 0 :(得分:2)
堆栈溢出的常见原因是错误的递归调用。通常,这是在递归函数没有正确的终止条件时引起的。在你的代码中,第一个递归调用总是使用相同的参数0和(length - 1)调用并且没有终止,它将陷入无限循环。修复你的代码并更新m1的值,使其终止。
考虑数组长度为6:
low = 0 and high = 5
m1 = 5
sortArray(data, 0, 5);