0

次のように関数を書くと

int sum(int i)
{ 
if(!i)
    return 0;
return sum(i--) + i;  //this line
}

コンパイラは return ステートメントを 3 つのアドレス コード/中間コードでどのように表現しますか? する

1) return i-- + sum(i) differ from 2) return sum(i) + i--? 

私の解釈では、最初のケースではiが追加され、次にi-1をパラメーターとしてsumが再帰的に呼び出され、他のケースではiをパラメーターとしてsumが呼び出され、 i-1が追加されます。そうですか?誰かがコンパイラレベルで何が起こるか説明できますか?

また、1)と2)を次のように変更するとどうなりますか

1)return i + sum(i--) and 2) return sum(i--) + i

再帰的な意味で何が起こりますか?無限ループになると思いますが、 i-- はどうですか?

4

0 に答える 0