# include & ltstdio.h & gt
# include & ltstring.h & gt
#定義N_L 30 //數組長度
#定義MAX 120 //壹個固定值
#define F_L 10 //如果這個例子中的數字是20,那麽n _ l-20 = f _ l。
Intnumi [n _ l] = {11,2,3,4,5,6,7,8,9,9,//測試數組,假設數組元素為正整數,否則做相應的修改。
1,2,3,4,5,6,7,8,9,9,
1,22,23,24,25,26,27,28,29,20};
Int find(int *p) //測試當前值是否匹配,如果匹配成功則輸出。
{ int i=0,sum = 0;
for(I = 0;我& ltn _ L;i++)
sum+= numi[I];
if(sum & gt;=MAX)返回0;
for(I = 0;我& ltn _ L;i++)
printf("%2d ",numi[I]);
printf(" = % d & lt;%d\n\n ",sum,MAX);
返回1;
}
int test(int *num_t,int deptemp,int site,char first)
/*遞歸搜索,num_t是數組的第壹個地址,deptemp記錄遞歸次數,site是數組的當前位置,first標記第壹層是否遞歸*/
{ int nback = 0;
while(site & lt;N_L)
{ if(' s ' = = first & amp;& amp站點& gtN_L-F_L)返回0;/*第壹層遞歸的特殊判斷*/
if(num _ t[site]= = 0){ site++;繼續;}/*如果當前位置的值已被刪除,則刪除下壹個值*/
n back = num _ t[site];num _ t[site]= 0;/*將當前值設置為零,並保存以備恢復。零表示刪除當前位置的值*/
if(deptemp & lt;F_L-1)測試(num_t,deptemp+1,site+1,' n ');/*刪除的數字小於10。繼續*/
else find(num _ t);/*遞歸到第十層,即去掉10這個數,測試是否匹配*/
num _ t[site]= n back;site++;/*恢復當前位置的值以測試其他情況*/
}
返回1;
}
void main()
{ test(numi,0,0,' s ');
}