我正在阅读Chris Pine的书“Learn to Progam”(这是关于Ruby的)。现在我正在尝试编写一个对单词进行排序的程序。不幸的是我坚持:stack level too deep (system stack error) in line 16
,如果我用Google搜索正确意味着存在无限循环,但我不知道为什么。
以下是代码:
words = []
wordss = []
word = 'word'
i = 0
k = 0
def sortw array
i = 0
if (array.length == 1) || (array.length == 0)
else sort array, [], [], i
end
return array
end
def sort unsorted, unsort, sorted, i
k = 0 # The error should be here, according to command prompt
while i < unsorted.length
while (unsorted[i] < unsorted[k])
if k < unsorted.length
k = k + 1
elsif k == unsorted.length
sorted.push unsorted[i]
else unsort.push unsorted[i]
end
end
i = i + 1
sort unsorted, unsort, sorted, i
end
if unsort.length != 1
i = 0
sort unsort, [], sorted, i
else sorted.push unsort[0]
end
return sorted
end
puts 'type one word per line...'
puts 'typing enter on an empty line sorts the inputted words'
while word != ''
word = gets.chomp
words = words.push word
end
wordss = (sortw words)
puts 'your words'
puts words
puts 'sorted here'
puts wordss
答案 0 :(得分:1)
您收到错误,因为递归不会因排序算法问题而停止。在sort
方法中,k
始终小于unsorted.length
。这会导致其他数组sorted
和unsort
永远不会填充。
例如,尝试输入以下内容:
此外,我认为您不想包含空行,因此我将更改代码:
words = words.push word
至words = words.push word if word != ''
这将创建unsorted
数组:
以下编号是递归sort
方法的迭代。
#initial variable state:
i = 0
k = 1
i
现在等于unsorted
数组长度,因此两个while循环永远不会再输入。 因此,以下代码会导致无限循环,因为没有任何内容被推送到unsort
数组:
if unsort.length != 1
i = 0
sort unsort, [], sorted, i #Problem is that `unsort` and `sorted` are empty
elsif
...
end