我试图理解给定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应该超出排列必须应用的数组的索引,但这不是这里的情况这就是我我不清楚。
作者熟悉Python,并在伪代码中使用相同(不幸)的习惯用法。在Python中,范围的开始是包容性的,而结束是独占的。稍后在该页面上,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++)
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结束