递归里面return的问题求解

xiaojiezizizi 2011-06-29 01:10:27


#include "stdio.h"

int num[10];
//保存分解式
void huafen(int m, int n, int k) // m表示待划分的数,n表示可用的最大的数,k表示已经分解的个数。
{
int i;
if(m == 0)
{
for(i = 0; i < k; i++)
printf("%d ",num[i]);
printf("\n");
return;
}
for(i = m>n?n:m; i >= 1; i--)
{
num[k] = i;
huafen(m-num[k],num[k],k+1);
// 递归调用对剩下的数进行分解,最大的分解数为num[k] , 以保证分解的数由大到小,防止消除重复的分解。
}

}

int main()
{

int m,n,k;
huafen(6,6,0);
return 0;
}




我在调试的时候发现.
第一步.
m n k 分别是6 6 0
然后再进行递归时.
m n k 是 0 6 1
然后执行了if语句里面的输出
但当执行到return时
下一步会直接到for循环.
此时i = 5.

为什么return会到了for. 为什么i成了5??

求解. 谢谢
...全文
264 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
txzsp 2011-07-06
  • 打赏
  • 举报
回复
设置断点调试下
至善者善之敌 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhao4zhong1 的回复:]
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
[/Quote]

我觉得赵哥说的对,自己单步调试,什么都明白了
xiaojiezizizi 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q191201771 的回复:]

return是return当前函数
现在是在for里面(又)调用了这个函数
return自然又到for里面了
[/Quote]
好. 谢谢你
xiaojiezizizi 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhao4zhong1 的回复:]

“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
[/Quote]

是什么意思呢??
TallPeaks 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q191201771 的回复:]

return是return当前函数
现在是在for里面(又)调用了这个函数
return自然又到for里面了
[/Quote]

这个比较好理解。
就想叫yoko 2011-06-29
  • 打赏
  • 举报
回复
return是return当前函数
现在是在for里面(又)调用了这个函数
return自然又到for里面了
ryfdizuo 2011-06-29
  • 打赏
  • 举报
回复
调试递归的时候,碰到函数F11跟进去,不要F10
赵4老师 2011-06-29
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
bdmh 2011-06-29
  • 打赏
  • 举报
回复
你先要搞清楚递归的原理
压入 第一次,第二次,第三次,第四次,第五次,第六次
第六次return后,开始弹出第五次,这是i是第五次的值,第五次完了,弹出第四次。。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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