(一开始dep=1,y=1)
procedure search(dep,y,tot:longint);
begin
if tot<0 then exit;
if sum[dep,y]<tot then exit;
if tot=0 then
begin
check;
exit;
end;
if dep>5 then exit;
if y=5 then search(dep+1,1,tot)
else search(dep,y+1,tot);
map[dep,y]:=true;
if y=5 then search(dep+1,1,tot-1)
else search(dep,y+1,tot-1);
map[dep,y]:=false;
end;
这里的第一个递归:
if y=5 then search(dep+1,1,tot)
else search(dep,y+1,tot);
map[dep,y]:=true;
当你开始search(dep,y+1,tot)后,后面的
map[dep,y]:=true;
还要执行么,如果要,这是执行的dep和y的值会是原来的值(dep,y),还是现在的值(dep,y+1),如果是(dep,y+1)话,是每递归一次就执行一次map[dep,y]:=true;还是等到y=5再执行这一步呢,我希望得到详细的解释,谢谢了!最好是每一步是什么样,都能做出具体的解和解释,谢谢了!
如果不行的话,可以解释一下这个程序,这个会比较完整例1.用顺序存储方式建立一棵有31个结点的满二叉树,并对其进行先序遍历。
program erchashu1;
var b:array[1..31] of char;
e:array[1..63] of byte;
n,h,i,k:integer;
procedure tree(t:integer);
begin
if e[t]=0 then exit
else
begin
write(b[t]);e[t]:=0;
t:=2*t;tree(t);(也是在这里出问题,不太懂,当t=2是,tree(t)是不是
t:=t+1;tree(t); 会一直递归下去,然后再执行t:=t+1,但这时肯定会过
end; ,我知道我说的不太对,请您以当N=3时一步一步解释
end; ,谢谢了
begin
repeat
write('n=');readln(n);
until (n>0) and (n<6);
fillchar(e,sizeof(e),0);
k:=trunc(exp(n*ln(2)))-1;
for i:=1 to k do e[i]:=1;
for i:=1 to 26 do b[i]:=chr(64+i);
for i:=1 to 5 do b[26+i]:=chr(48+i);
h:=1 ;tree(h);
writeln;
end.
ABOUTYOU