-1

だからここで私は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に等しいようです

何か案は?

4

1 に答える 1

1

これは複雑な計算方法のようです。2^n-1ここnで、は関数への入力です。

AC変換は次のようになります。

int mystery(int n)
{
  if (n != 0) {
    return mystery(n - 1) + mystery(n - 1) + 1;
  } else {
    return 0;
  }
}
于 2013-03-15T18:19:39.193 に答える