2013-03-15 107 views
-1

所以在这里我有mips这个函数。我试图将其转换为c。将mips转换为c

1 mystery: bne $0, $a0, recur # 
2   li $v0, 0  # 
3   jr $ra   # 
4 recur:  sub $sp, $sp, 8  # 
5   sw $ra, 4($sp) # 
6   sub $a0, $a0, 1  # 
7   jal mystery   # 
8   sw $v0, 0($sp) # 
9   jal mystery   # 
10   lw $t0, 0($sp) # 
11   addu $v0, $v0, $t0 # 
12   addu $v0, $v0, 1 # 
13   add $a0, $a0, 1  # 
14   lw $ra, 4($sp) # 
15   add $sp, $sp, 8  # 
16   jr $ra   # 

我的意思只是在看这个,它看起来递归

INT谜(INT N){

}

它看起来像是在8开始,但我迷路非常迅速地跳跃到神秘。 它似乎最终的情况下它是否等于0

有什么想法?

回答

1

这似乎是一种计算错误的方法2^n-1,其中n是函数的输入。

A C翻译可能是这个样子:

int mystery(int n) 
{ 
    if (n != 0) { 
    return mystery(n - 1) + mystery(n - 1) + 1; 
    } else { 
    return 0; 
    } 
}