2014-04-16 30 views
0

我正在嘗試爲應該處理二叉樹的遞歸函數編寫僞代碼。但問題是函數應該返回兩個變量。我知道函數應該返回變量,並且對於更多的返回值,他們應該使用list,arrayvector,但我不知道如何將它作爲僞代碼呈現。僞代碼函數返回處理樹的兩個結果

它看起來是否正確的僞代碼?

function get_min(node *p) 
begin 
    if (p==NULL) then   
      return list(0,0); 
    else 
      (vl,wl) = get_min(p->left) 
      (vr,wr) = get_min(p->right) 
      if (vl > vr) then 
       return list(vr + p->cost, 1) 
      else 
       return list(vl + p->cost, 0) 
      end if 
    end if 
end function 

回答

0

由於它是僞代碼,幾乎任何事情都會發生。

不過,我寧願去忽略"list"

return (0, 0) 
return (vr + p->cost, 1) 
return (vl + p->cost, 0) 

似乎沒有被任何實際的好處將"list"那裏 - 在(..., ...)格式相當清楚地表明已經返回兩個值 - 有沒有需要明確說明你正在使用list來返回它們。

旁註:你提到listarrayvector,但pair是在一些語言的另一種選擇,或在對象包裝在兩個(通常給人編譯時類型檢查的優勢 - 沒有真正適用於僞碼,顯然)。

如果您想清楚該函數只返回2個值,您可以考慮用"pair"代替"list",而不是將其刪除。

+0

我只是想確保沒有人會抱怨說,'function'只返回一個變量。 – Farzad

0

如果您傳遞參數作爲參考,則不需要使用lists,因爲@Dukeling建議。

void function get_min(node *p , int *cost , int * a) 
begin 
    if (p==NULL) then   
      *cost =0 ; *a =0 ; return ; 
    else 
      get_min(p->left ,vl ,vw) 
      get_min(p->right , vr , wr) 
      if (vl > vr) then 
       *cost = vl + p->cost , *a =0 ; return; 
       else 
       *cost = vl + p->cost , *a =0 ; return ; 
      end if 
    end if 
end function