如果我按如下方式编写函数
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
在递归意义上会发生什么?我认为这将是一个无限循环,但是对于我来说呢?