次のように関数を書くと
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-- はどうですか?