递归中的参数是如何变化的?

zihui0459 2017-11-20 03:26:54
如下是一个求哈夫曼树编码的算法,len的值是如何变化的呢?
void HuffManCoding(struct BTreeNode* FBT,int len)//len初始值为0
{
static int a[10];//定义静态数组a,保存每个叶子的编码,数组长度至少是树深度减1
if(FBT!=NULL)
{
if(FBT->left==NULL&&FBT->right==NULL)
{
int i;
printf("结点权值为%d的编码:",FBT->data);
for(i=0;i<len;i++)
{
printf("%d",a[i]);
printf("\n");
}
}
else
{
a[len]=0;
HuffManCoding(FBT->left,len+1);
a[len]=1;
HuffManCoding(FBT->right,len+1);
}
}
}
...全文
404 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
老马何以识途 2017-11-21
  • 打赏
  • 举报
回复
这里len是值传递,所以len在每次调用HuffManCoding返回时保持调用前的值,永远记住这一点。
自信男孩 2017-11-20
  • 打赏
  • 举报
回复
建议在函数里static int a[10];后添加一句


printf("len = %d\n", len);
这样每次递归都能看到传进来的len的值,也就可以看到其变化了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧