试图理解排列的产生

问题描述 投票:0回答:2

我试图理解给定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)

为什么有结尾+ 1用于i循环这个我不清楚,据我所知,结束+ 1应该超出排列必须应用的数组的索引,但这不是这里的情况这就是我我不清楚。

c algorithm data-structures permutation backtracking
2个回答
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++)

0
投票
for i -> (start, end+1)

它意味着迭代从start开始的每个值,自动增量和条件满足end + 1

permutation(start+1,end)

它只是一个函数调用,参数的start和end值都传递给它

e.g

function permutation(start, end) 

start = 1和end = 10

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

然后,排列(开始+ 1,结束)被调用让我们说第一个项目start = 1.它将以start为2并以10结束

© www.soinside.com 2019 - 2024. All rights reserved.