切换到宽版
  • 14438阅读
  • 48回复

递归转非递归 [复制链接]

上一主题 下一主题
离线haiwei
 
只看楼主 倒序阅读 0 发表于: 2007-07-02
下面的程序如何转非递归?
给n个数,要求取任意几个数相加得m


var m,n,m2,i,n2:integer;
  a:array[1..10]of integer;
  b:array[1..10]of boolean;
procedure next(m2,k:integer);
begin
  if k>n then
    begin
    if m2=m then
    begin
      inc(n2);
      for i:=1 to n do
        if b then write(a,' ');
      writeln;
    end;
    end
  else
    begin
    next(m2,k+1);
    b[k]:=true;
    next(m2+a[k],k+1);
    b[k]:=false;
    end;
end;
begin
readln(m,n);
for i:=1 to n do
  begin
    read(a);
    b:=false;
  end;
n2:=0;
next(0,1);
writeln('zu shu:',n2);
end.
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 1 发表于: 2007-07-02
情况紧急啊
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 2 发表于: 2007-07-02
SOS!!!!!!!!!!!!!!!!!!!!!!!!!!!!
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 3 发表于: 2007-07-02
回复啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 4 发表于: 2007-07-02
555555555555555555555555555~~~~~~~~~~~~~~~~~
haiwei
http://user.qzone.qq.com/317048955
离线181818181818
只看该作者 5 发表于: 2007-07-02
正在想
离线haiwei
只看该作者 6 发表于: 2007-07-02
......
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 7 发表于: 2007-07-02
苍天啊,帮忙啊
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 8 发表于: 2007-07-02
终于编好了
haiwei
http://user.qzone.qq.com/317048955
离线haiwei
只看该作者 9 发表于: 2007-07-02
var m,n,m2,i,n2,k:integer;
  a:array[1..10]of integer;
  b:array[1..10]of boolean;
function pan:boolean;
var i:integer;
begin
  pan:=false;
  for i:=1 to n do
    if not(b) then pan:=true;
end;
begin
readln(m,n);
for i:=1 to n do
  begin
    read(a);
    b:=false;
  end;
n2:=0;
k:=1;
while pan do
  begin
    while k=n do
    begin
      m2:=0;
      for i:=1 to n do
        if b then inc(m2,a);
      if m2=m then
        begin
        for i:=1 to n do
          if b then write(a,' ');
        writeln;
        inc(n2);
        end;
      if not(pan) then
        begin
        writeln(n2);
        halt;
        end;
      while b[k]=true do
        begin
        b[k]:=not(b[k]);
        k:=k-1;
        end;
      b[k]:=true;
    end;
    k:=k+1;b[k]:=false;
  end;
end.
(部分,[k]发上去就没了,请见谅,希望坛主早日修复次bug)
[ 此贴被haiwei在2007-07-02 15:49重新编辑 ]
haiwei
http://user.qzone.qq.com/317048955
快速回复
限100 字节
 
上一个 下一个