我正在尝试了解给定here的置换算法 我不清楚的是他们提到的第一段伪代码
array = [1, 2, 3, 4]
function permutation(start, end):
#i will go from start to end
for i -> (start, end+1):
permutation(start+1,end)
为什么在我的循环中使用了end + 1,据我所知,据我所知,end + 1应该超出必须应用置换的数组的索引,但这不是这种情况我不清楚。
答案 0 :(得分:1)
作者熟悉Python,并在伪代码中使用相同的(不幸的)惯用法。在Python中,范围的开头是 inclusive ,而结尾是 exclusive 。稍后在该页面上,Python代码摘录证明确实如此:
for i in range(start, end+1):
使用此代码,i
将依次分配从start
到end
(包括端值,但不包括end + 1
)的所有整数。
在C语言中,人们经常会在循环中使用<
,然后它也会在循环中发生:
for (size_t i = start; start < end + 1; start++)
^^^^^^^
更自然的是写
for (size_t i = start; start <= end; start++)
答案 1 :(得分:0)
for i -> (start, end+1)
这意味着从 start 开始的每个值都进行迭代,并且自动递增且条件满足 end + 1
permutation(start+1,end)
这是相同的函数调用,其参数具有开始和结束的值
例如
function permutation(start, end)
开始= 1,结束= 10
inside foreach将从1开始以自动递增的方式进行迭代,直到达到10,意味着小于(10 + 1)= 11
然后,置换(开始+1,结束)被调用 假设第一个项目start =1。它将以start为2并以10为结束