中间代码/三个地址代码中的加法运算是什么样的?

时间:2014-06-09 15:26:55

标签: c recursion compiler-construction intermediate-language

如果我按如下方式编写函数

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

编译器如何用三个地址代码/中间代码表示return语句?

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

在递归意义上会发生什么?我认为这将是一个无限循环,但是对于我来说呢?

0 个答案:

没有答案