Python De La Matrice De Rotation

Je suis donc la mise en œuvre d'un bloc de swap algorithme en python.

L'algorithme que je suis est-ce:

Initialiser Un = arr[0..j-1] et B = arr[d..n-1]
1) effectuer les opérations suivantes jusqu'à ce que la taille de A est égale à la taille de B

a) Si l'Une est plus courte, diviser B en Bl et Br tels que Br est de même
la longueur A. Swap Un et Br à changer ABlBr en BrBlA. Maintenant
est à sa place définitive, afin de se reproduire sur des morceaux de B.

b) Si A est plus, diviser en Al et Ar, tels que Al est de même
la longueur B Swap Al et B pour le changer AlArB en BArAl. Maintenant B
est à sa place définitive, afin de se reproduire sur des morceaux de A.

2), Enfin, quand A et B sont de taille égale, bloc d'échange.

Le même algorithme a été implémenté en C sur ce site, des La Matrice De Rotation

Mon code python pour le même est

a = [1,2,3,4,5,6,7,8]

x = 2

n = len(a)


def rotate(a,x):
    n = len(a)

    if x == 0 or x == n:
        return a

    if x == n -x:
        print(a)
        for i in range(x):
            a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
        print(a)
        return a

    if x < n-x:
        print(a)
        for i in range(x):
            a[i], a[(i-x+n) % n] = a[(i-x+n) % n], a[i]
        print(a)
        rotate(a[:n-x],x)
    else:
        print(a)
        for i in range(n-x):
            a[i], a[(i-(n-x) + n) % n] = a[(i-(n-x) + n) % n] , a[i]
        print(a)
        rotate(a[n-x:], n-x)

rotate(a,x)
print(a)

J'obtiens le droit des valeurs à chaque étape, mais les récursive appel de fonction ne retourne pas le résultat escompté, et je n'arrive pas à comprendre la cause. Quelqu'un peut m'expliquer quel est le problème avec ma récursivité ? et que peut-être la solution de rechange possible.

InformationsquelleAutor Sam | 2013-06-27