关于前N数求等于X的递归解法(C语言)

本文通过递归和栈技术解决了一个数学问题:找到从1到N的所有整数序列,其中序列元素之和等于给定的X,并计算满足条件的序列总数。此算法展示了在解决复杂问题时使用迭代和递归方法的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/************************************************************************/ /* 问题:求从1到N相加和为X的序列集合,以及集合的记录数 */ /* 关于本解法:利用栈去存储序列项,采用递归的方法实现不同深度的遍历 */ /* EIT王子 2011-7-16 */ /************************************************************************/ #include<stdio.h> #include<stdlib.h> #define SatckSize 20 //输出组合 void output(int * nums,int top,int linenum) { int i; printf("%d...",linenum); for(i=0;i<=top;i++) printf("%d\t",nums[i]); printf("\n"); } //store存储空间statcktop栈顶,value压栈值,valsum值合,maxval最大取值,length空间剩入长度,judgevalue要匹配的值,*more保存序列组合的总条数 void recursion(int *Store,int stacktop,int value,int ValSum,int maxval,int length,int judgevalue,int* more) { int val; Store[stacktop]=value; ValSum+=value; if(judgevalue==ValSum&&stacktop>=1) { *more=*more+1; output(Store,stacktop,*more); return; } else if(value<maxval&&ValSum<judgevalue&&length>0) { length--; stacktop++; for(val=value+1;val<=maxval;val++) recursion(Store,stacktop,val,ValSum,maxval,length,judgevalue,more); } else { return; } } void calc() { int N=20; //求N之前的数(N<=SatckSize) int X=24; //求序列和等于X的序列 int S=0; //用来保存共有多少组这样的序列 int Store[SatckSize];//定义一个数组用做栈 int stacktop=0; //栈顶位置 int ValSum=0; //栈中序列的值 int base; //计算序列的起始值 for(base=1;base<=20;base++) { recursion(Store,stacktop,base,ValSum,X,N-base,X,&S);//采用递归技术来进行计算 } printf("\n have %d lists\n",S); } void main() { calc(); system("Pause"); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值