2011-05-30 180 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。如果这是作业,请给它加标签或提到它不是问题中的作业。