C 程式設計從n數中抽出r個數的所有組合方式(遞迴)

2021-10-07 11:12:26 字數 707 閱讀 6617

關於遞迴

程式設計從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...