尾递归和循环
《编程珠玑(续)》中第13章习题8要求分析如下的递归转换迭代,即相当于把尾递归转换成循环。
function A(M)
{
if(M==0)return X;else{S=A(M-1);return G(S,M);}
}function B(M)
{S=X;for(j=1;j<=M;j++)S=G(S,j);return S;
}
G(S,M)就是典型的尾递归。至于G(S,M)+1是不是尾递归,找了些资料上说不是,但是可以很容易得将其转换成尾递归。比较好的参考资料:
http://www.cnblogs.com/carter2000/archive/2012/04/19/2458018.html
尾递归优化
对于尾递归,以前的理解仅局限于它是递归和尾调用的终极合体,比普通递归效率高。至于效率为什么高,高在哪,一直没有深究过,现在补上。
要说尾递归,得先说尾调用。我理解的尾调用大概是这么一种情况:
函数A里面调用了函数B。
函数B执行后,函数A
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
