x的n次方c语言递归负数,关于前N数求等于X的递归解法(C语言)

/************************************************************************/

/* 问题:求从1到N相加和为X的序列集合,以及集合的记录数*/

/* 关于本解法:利用栈去存储序列项,采用递归的方法实现不同深度的遍历 */

/* EIT王子 2011-7-16 */

/************************************************************************/

#include

#include

#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(value0)

{

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");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值