2016-04-02 12 views
1

ich mich gefragt, ob jeder Algorithmus dieser Art existiert, ich habe nicht die geringste Ahnung, wie es zu programmieren ...rekursive Algorithmus, der jedes Paar eines Satzes kehrt

Für exemple, wenn Sie es geben [1; 5; 7] es sollte zurückgehen [(1,5); (1,7); (5,1); (5,7); (7,1); (7,5)]

Ich möchte keine for-Schleife verwenden.

Haben Sie eine Ahnung, wie Sie dies erreichen können?

Antwort

1

Sie haben zwei Fälle: Liste leer ist -> leere Liste zurück; Liste ist nicht leer -> nehmen Sie das erste Element x, für jedes Element y Ausbeute (x, y) und machen Sie einen rekursiven Aufruf am Ende der Liste. Haskell:

pairs :: [a] -> [(a, a)] 
pairs [] = [] 
pairs (x:xs) = [(x, x') | x' <- xs] ++ pairs xs 

--*Main> pairs [1..10] 
--[(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(1,10),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(2,10),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(3,10),(4,5),(4,6),(4,7),(4,8),(4,9),(4,10),(5,6),(5,7),(5,8),(5,9),(5,10),(6,7),(6,8),(6,9),(6,10),(7,8),(7,9),(7,10),(8,9),(8,10),(9,10)] 
-1

Ich weiß nicht, ist der verwendete Algorithmus eine rekursive ist oder nicht, aber was fragen Sie ist die itertools.combinations('ABCD', 2) Methode von Python und ich nehme an, das gleiche in anderen Programmiersprachen implementiert ist, so können Sie wahrscheinlich verwenden die native Methode.

Aber wenn Sie benötigen, um Ihre eigenen schreiben, dann können Sie einen Blick auf Algorithm to return all combinations of k elements from n (auf dieser Seite) nehmen für einige Ideen

Verwandte Themen