[题目分析]从n个数中取出所有k个数的所有组合设数已存于数组A[n]中为使结果唯一可以分别求出包括A[n]和不包括A[n]的所有组合即包括A[n]时求出从A[n]中取出k个元素的所有组合不包括A[n]时求出从A[n]中取出k个元素的所有组合
CONST n=k=
TYPE ARR=ARRAY[n] OF integer
VAR ABARR// A中存放n个自然数B中存放输出结果
PROC outresult//输出结果
FOR j= TO k DO write(B[j])writeln
ENDP
PROC nkcombination(ijkinteger)
//从i个数中连续取出k个数的所有组合i个数已存入数组A中j为结果数组B中的下标
IF k= THEN outresult
ELSE IF(ik≥)THEN [ B[j]:=A[i]j:=j+
nkcombination(ikj)
nkcombination(ikj)]
ENDP
[算法讨论]本算法调用时i是数的个数(题目中的n)k≤ij是结果数组的下标按题中例子用nkcombination()调用若想按正序输出如…可将条件表达式ik≥改为i+k≤n其中n是数的个数i初始调用时为两个调用语句中的i均改为i+
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []