广义表递归问题!!!

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:32:28
大家能帮我理解下麽 给点经验 请问大家以前是怎麽学习递归的,基本概念我想我了解 ,却没办法自如使用 看代码也知道大概是怎麽囘事(但愿我没理解错),到写的时候就不知道怎麽办了。请大家给个思考递归的大概思路让我参考下,本人只有初中毕业就辍学了,是自己自习的,苦苦混了两年了,长进很慢 希望大家能帮帮我
好比遍历,插入,广义表 让我不知不知所措

谢谢二楼和三楼 你们的答案都对我有很大的帮助 已经成功写出来了 谢谢你们 但只能选一个 所以只能投票决定了 不好意思了。。。。。

看到你已经对广义表有了了解,那么以经典的(前序)遍历二叉树为例,说说我对递归思路的理解吧。
(为了说得更清楚,不考虑算法是否高效编码是否简明等问题)

递归的总体思路是只考虑目前我们需要解决的问题,剩下的都交给函数去处理

1、确定总体思路,那么前序遍历二叉树的总体思路是什么?
1st 先对根节点数据域操作(需要解决的)
2nd 操作根节点的左子树数据域(交给函数解决的)
3rd 最后操作根节点右子树数据域(交给函数解决的)
4th 对每个根节点都这样操作(交给函数解决的)

2、确定错误和最低层的返回条件
这里我们设定为
if(root == NULL)
{
return FALSE;
}

3、构建函数(我们只把目前需要解决的问题搞定就ok了,剩下的交给函数自己去处理)

int view(TREENODE *root)
{
if(root == NULL)
{
return FALSE;
}
else
{
execute(root->data);
}
/*目前考虑的是1、判定错误 2、操作根节点数据域*/

view(root->left);
view(root->right);
/*左右子树数据域操作不是我们目前“急需”解决的,交给函数完成*/

return OK;
}

这样就完成前序遍历二叉树函数的构建。

希望对你有帮助吧。

比如你在写一个递归函数fun1(),里面当然要用到fun1(),此处不好理解时你不妨假想已经存在一个函数fun2(),你只管调用它就好了,这样到你完成fun1()函数的编写时,再将其中的fun2()改为fun1()即可。这样应该容易理解些,在理解时不必一层一层往里套着想。

递归函数经常与选择语句配合着使用,多做一些练习,从简单的慢慢来,
学习程序需要的是冷静与耐心<