1樓:
手寫乙個stack, 然後每當需要recursive call的時候push stack, stack非空的時候pop並處理. 相當於模擬乙個call stack. 即:
procedure make1_non_rec(tx,ty:integer);
vari,x,y:integer;
begin
stack.clear();
stack.push(tx,ty);
while(!stack.empty())begin
x:=stack.top().x;
y:=stack.pop().y;
g[x,y]:=p;
for i:=1 to 8 do
if (g[x+u[i],y+v[i]]=0) and (a[x+u[i],y+v[i]]=a[x,y]) then
stack.push(x+u[i],y+v[i]);
endend;
2樓:
procedure make1(x,y:integer);
var i:integer;
begin
g[x,y]:=p;
i:=0;
repeat
i:=i+1;
if (g[x+u[i],y+v[i]=0)and(a[x+u[i],y+v[i]=a[x,y])then
begin
g[x,y]:=p;
x:=x+u[i];
y:=y+v[i];
i:=0;
end;
until i<=8;
end;
3樓:匿名使用者
procedure make1_non_rec(tx,ty:integer);
vari,x,y:integer;
begin
stack.clear();
stack.push(tx,ty);
while(!stack.empty())begin
x:=stack.top().x;
y:=stack.pop().y;
g[x,y]:=p;
for i:=1 to 8 do
if (g[x+u[i],y+v[i]]=0) and (a[x+u[i],y+v[i]]=a[x,y]) then
stack.push(x+u[i],y+v[i]);
endend;
遞迴演算法和非遞迴演算法在分析時間複雜度和空間複雜度上為什麼不同
在演算法分析中,當乙個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為乙個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法 1 代入法 substitution method 代入法的基本步驟是先推測遞迴方程的顯式解...
面試題遞迴演算法,遞迴演算法選擇題
我來這麼解釋把 當你啟用了程式foo 30 那麼根據程式 i 30 即不 0 也不 2,那麼他就走 foo i 1 foo i 2 那i 1 跟 i 2 是什麼東西的呢,那就是f 29 f 28 同理f 29 怎麼拆呢?依次照f 30 的方式下去。當遇到f 2 的時候,程式判斷 返回乙個1,那麼最後...
用遞迴演算法解決下面的問題(C C )
拷乙個我編的自己用的給你。int fullorder int n int i,j,k,n for i n 1 i n i int re malloc sizeof int n n if n 1 elsere i n n j n k n i free re1 return re 結果在返回的指標裡。在...