如果我写一个函数如下
int sum(int i)
{
if(!i)
return 0;
return sum(i--) + i; //this line
}
编译器如何用三个地址码/中间码来表示返回语句?做
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-- 呢?