0

如果我写一个函数如下

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-- 呢?

4

0 回答 0