for循环里的递归函数

铁锈_ 2015-11-03 07:25:38
整数分解问题
1=1;
3=1+1+1;3=1+2;3=3;
这个程序我是画了程序运行情况的图才知道为什么search(remainder-i,i,nTerm+1)而不是search(remainder-i,i,nTerm++)
像归并排序这种递归,我现在也不思考程序如何运行了,假设递归是对的,直接往下写。
可如果是这种带for循环的我就头疼了,有人能解释下那个for(){ 递归函数 } 么,如果我不画图分析我大概会写成nTerm++
#include <stdio.h>
#define MaxN 30

int Terms[MaxN] ;
int N ;
int count ;


void Search( int remainder , int start , int nTerm )//remainder剩余数值
//start后面的分解项不超过start
// nTerm已分解项数
{
int i;

if( remainder==0 )
{
count++ ; //记录当前结果数,方便输出符号
if( count%4 != 1 )
printf(";") ;

printf( "%d=%d",N,Terms[0] ) ;
for(i=1 ; i<nTerm ;i++)
printf( "+%d" , Terms[i] ) ;

if (count%4==0)
printf("\n") ;
}
else
for( i=start ; i<=remainder ; i++ )
{
Terms[nTerm] = i ;
Search( remainder-i , i , nTerm+1 ) ;
}
}


int main()
{
scanf("%d" , &N) ;

count = 0 ;
Search(N , 1 , 0) ;
if(count%4!= 0)
printf("\n") ;
return 0 ;

}

...全文
596 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-11-04
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
fefe82 2015-11-04
  • 打赏
  • 举报
回复
引用 2 楼 u010107248 的回复:
[quote=引用 1 楼 fefe82的回复:]你需要解释什么? 看你的叙述你似乎已经明白了。
如果没有书上的代码我肯定很难写出来,而且那个nterm+1我会写错。如果不分析递归调用过程能不能直接看出来是nterm+1。。。。[/quote] 这个,既然这个你已经明白了,那就没什么可解释的了。 要想自己明白,那只能你自己多分析几个递归调用过程。 分析这件事是剩不掉的,只不过有些人分析得多了可以分析得快一些而已。不要期望能“直接看出来”。
fly_dragon_fly 2015-11-04
  • 打赏
  • 举报
回复
Terms[nTerm] = i nTerm代表当前已经填入的数字, 要是nTerm++, 下一次循环就变了, 你画过调用树应该看得出来
铁锈_ 2015-11-03
  • 打赏
  • 举报
回复
引用 1 楼 fefe82的回复:
你需要解释什么? 看你的叙述你似乎已经明白了。
如果没有书上的代码我肯定很难写出来,而且那个nterm+1我会写错。如果不分析递归调用过程能不能直接看出来是nterm+1。。。。
fefe82 2015-11-03
  • 打赏
  • 举报
回复
你需要解释什么? 看你的叙述你似乎已经明白了。

70,023

社区成员

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

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