本文主要是介绍消除尾部递归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*************************************************************************
消除尾部递归
由于函数调用是通过堆栈来完成,因此函数的递归将会造成大量内存空间的浪
费,因此在没有必要的情况下不宜用递归。有时我们可以用递归的思想来考虑问题,
然后通过某些方法来消除递归,而这里仅仅考虑当递归语句是函数中最后执行的语
句情况下的消除方法,即通过使用循环可以将递归改变为迭代。下面函数就是上
篇《用递归的方法进行二叉树的搜索和插入》中的二叉树搜索函数的非递归版本。
Leo,2006/10/6
stefzeus@163.com
**************************************************************************/
消除尾部递归
由于函数调用是通过堆栈来完成,因此函数的递归将会造成大量内存空间的浪
费,因此在没有必要的情况下不宜用递归。有时我们可以用递归的思想来考虑问题,
然后通过某些方法来消除递归,而这里仅仅考虑当递归语句是函数中最后执行的语
句情况下的消除方法,即通过使用循环可以将递归改变为迭代。下面函数就是上
篇《用递归的方法进行二叉树的搜索和插入》中的二叉树搜索函数的非递归版本。
Leo,2006/10/6
stefzeus@163.com
**************************************************************************/
TreeNode *TreeSearch(TreeNode *root,KeyType target)
{
while(root && target != root->entry.key)
if(target < root->entry.key)
root=root->left;
else
root=root->right;
return root;
}
{
while(root && target != root->entry.key)
if(target < root->entry.key)
root=root->left;
else
root=root->right;
return root;
}
/*
暂时到这了,今天是中秋节。。。找朋友吃饭去了。。。55555555555555
*/
暂时到这了,今天是中秋节。。。找朋友吃饭去了。。。55555555555555
*/
这篇关于消除尾部递归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!