2011-05-30 175 views
0
int stirling(int n,int k) 
    { 

    if((n==0)&&(k==0)) 
      return 1; 

    else if((n>=1)&&(k>0)) 
      return stirling(n-1,k-1)-(n-1)*stirling(n-1,k); 

    else if(n>0) 
      return 0; 

    return 0;   
    } 

我試圖寫在x86彙編該功能,我無法弄清楚如何調用該函數return stirling(n-1,k-1)-(n-1)*stirling(n-1,k);遞歸函數

任何人有一個想法或能幫助我做到這一點?

謝謝。

+3

aod如何初始調用此函數? – 2011-05-30 02:01:47

回答

2

與調用此函數的任何其他函數沒有區別。關於遞歸絕對沒有什麼特別的,只需像通常那樣實現C語言。

n和k基本上都是局部變量,您需要本地存儲這些變量的當前實例。堆棧是一個很好的地方。或者調用任何函數時保存在堆棧上的寄存器。 (這裏再次沒有什麼特別的,解決方案與遞歸無關,但是C的標準實現)。

ldr r0,[sp-#N_OFFSET] 
sub r0,#1 
ldr r1,[sp-#K_OFFSET] 
sub r1,#1 
bl stirling 
ldr r1,[sp-#N_OFFSET] 
sub r1,#1 
sub r4,r0,r1 
ldr r0,[sp-#N_OFFSET] 
sub r0,#1 
ldr r1,[sp-#K_OFFSET] 
push r4 
bl stirling 
pop r4 
signed multiply r0=r4*r0 
clean up stack for return 
bx lr 

不,這不是x86彙編,我會讓你轉換到x86。如果這是作業,請給它加標籤或提到它不是問題中的作業。