pascal编程,请用递归但别那么难理解:已知一个一维数组a[1..10]和一整数M,如能使a中任意几个数的和等于M

则输出‘yse’,反之输出'no';
请不要去看别人的程序,因为我看不懂,请给一个好理解的递归代码。

var
a:array[1..10] of integer;
m,i,num:integer;

procedure next(m,x:integer;s:string);
var {x为当前选中的元素的下标,s为选中的元素的下标串组合}
i:integer;
ss:string;
begin
if m=0 then begin writeln(s); inc(num); end;
if m>0 then 
for i:=x to 10 do begin
str(i:3,ss);
next(m-a[i],i+1,s+ss);
end;
end;

begin
for i:=1 to 10 do a[i]:=i;
m:=16;
num:=0;
next(m,1,'');
if num=0 then writeln('no') 
else begin 
writeln('yes');
writeln('num=',num);
end;
end.

温馨提示:答案为网友推荐,仅供参考
相似回答