2014-09-16 5 views
0

Je ne comprends pas comment appeler mon code de manière récursive. Voici mon code à ce jour:Difficulté à implémenter l'algorithme de Strassen en Python

import numpy 

B = [[5,5,5,5,5,5,5,5],[6,6,6,6,6,6,6,6],[7,7,7,7,7,7,7,7],[8,8,8,8,8,8,8,8], 
[9,9,9,9,9,9,9,9], [10,10,10,10,10,10,10,10],[11,11,11,11,11,11,11,11],  [12,12,12,12,12,12,12,12]] 

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

def main(): 
    strassen(A,B) 

def strassen(A, B): 
    A = numpy.asarray(A) 
    B = numpy.asarray(B) 
    lengthA = len(A) 
    lengthB = len(B) 
    if lengthA == 2: 
     print "will calculate" 
    else:  
     a, b = strassen(A[:lengthA//2, :lengthA//2], B[:lengthB//2, :lengthB//2]) 

     lengthA = lengthA//2 
     lengthB = lengthB//2 
     print a 
     print b 
     return a, b 

Je suis en train de réduire a-[[5,5],[6,6]] et b-[[5,5],[6,6]] mais je reçois une erreur:

a, b = strassen(A[:lengthA//2, :lengthA//2], B[:lengthB//2, :lengthB//2]) 
TypeError: 'NoneType' object is not iterable. 

a et b sont les 1ers matrices 2x2 qui sera formé après la 2ème division matricielle entière pour A et B. S'il vous plaît quelqu'un peut m'expliquer cela. Merci

Répondre

1

Vous n'avez aucune valeur de retour dans votre condition de terminaison de récursivité. Quand je cours votre code, il imprime "calculera" avant de donner l'erreur. L'erreur se produit après cela car il n'y a pas de valeur de retour de la fonction strassen sur le dernier appel (lorsque lengthA == 2).

Questions connexes