關於遞迴
程式設計從n數中抽出r個數的所有組合方式
例如:從1,2,3,4中四個數抽三個數組合為:432,431,421,321
關鍵:下乙個數的選取範圍要在比上乙個數小的數的集合中
例如,4個數中選3個,第乙個數可以選4,3,第二個數可以選2(若選3),3(若選4),第三個數可以選1(若選2),2(若選3)。總之就是每次選後,剩下的數要不少於r-1,且下次選的數要小於本次選的數
用陣列b來儲存選擇數的下標號
#include
void
combine
(int n,
int r,
int a,
int b,
int r)
;int
main()
;//只能是1,2,3....n
scanf
("%d%d"
,&n,
&r);
int b[r]
;combine
(n,r,a,b,r);}
void
combine
(int n,
int r,
int a,
int b,
int r)
printf
("\n");
}else
}}
輸出從n個數中選m個數的所有組合
題目 n個數1,2,n,從這n個數中任意選m個數,輸出所有不同組合,共有c n,m 種不同組合。如n 5,m 3,會產生如下輸出 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 2 1 3 2 1 解題思路1 採用遞迴的方法,終止條件是當m 0時,...
排列組合 從n個自然數中取出r個數的組合
這種題目一般有兩種方法,比較直接的方法就是使用循壞,但是對於這種方法只有r小於等於4時才是可行的,這個時候複雜度是 o n r 可知,這種方法的時間複雜度很高,而且這種迴圈機制嚴重依賴r,通過r來控制迴圈層數,因此這種方法不具有普遍性。最常用的方法就是使用遞迴。在迴圈演算法設計中,每個組合中的資料都...
求 從m個自然數中任取n個數的所有組合
問題 編寫乙個遞迴演算法,找出從自然數1,2,3,m中任取n個數的所有組合。例如 m 5,n 3時,所有組合為543,542,541,532,531,521,432,431,421,321。方法1 設這m個自然數存放在整數陣列a k 中,a i 存放i 1 0 i n 1 可採用遞迴演算法,例如,m...