试图理解排列生成

trying to understand permutation generation

我正在尝试理解给定 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)

为什么在 for i 循环中使用了 end+1,据我所知,end+1 应该超出必须应用排列的数组索引,但事实并非如此这是我不清楚的地方。

作者熟悉Python,并在伪代码中使用了相同的(不幸的)成语。在 Python 中,范围的开始是 包含 ,而结束是 不包含 。该页面后面的 Python 代码摘录证明确实如此:

for i in range(start, end+1):

使用此代码 i 将按顺序分配从 startend 的所有整数,但不包括 end + 1.

在 C 语言中,人们经常会在循环中使用 < - 那么它也会在那里发生:

for (size_t i = start; start < end + 1; start++)
                               ^^^^^^^

虽然写

更自然
for (size_t i = start; start <= end; start++)
for i -> (start, end+1)

表示从start开始对每个值进行迭代,自增且条件满足end+1

permutation(start+1,end)

这只是同一个函数调用,参数的开始和结束值传递给它

例如

function permutation(start, end) 

开始 = 1 结束 = 10

foreach 内部将从 1 开始自动递增迭代直到达到 10,意味着小于 (10+1) = 11

然后调用permutation(start+1,end) 假设第一项 start = 1。它将以 2 开始调用,以 10

结束