2013-05-08 125 views
0

我在想,如果你确定这是一个头或尾递归函数:尾v头递归

int exponentiation(int x, int y){ 
    if(!y) { return 1; } 
    return y > 1 ? x * exponentiation(x, y-1) : x; 
} 

回答

3

这不是尾递归:返回的exponentiation结果的最后一个动作由功能采取;乘以x即可。

但功能很容易通过增加一个额外的参数,EXP转换为尾递归执行:

int exponentiation_tail(int x, int y, int exp = 1){ 
    if(y <= 0) { return exp; } 
    return exponentiation_tail(x, y-1, exp*x); 
}