我不知道如何递归地调用我的代码。这是我目前的代码:
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
我试图将
a
减少到[[5,5],[6,6]]
并将b
减少到[[5,5],[6,6]]
,但我得到了一个错误:a, b = strassen(A[:lengthA//2, :lengthA//2], B[:lengthB//2, :lengthB//2])
TypeError: 'NoneType' object is not iterable.
a
和b
是第一个2x2矩阵,将在A和B的第二个全矩阵划分后形成。请有人向我解释一下。谢谢 最佳答案
递归终止条件中没有返回值。当我运行你的代码时,它会在给出错误之前打印“将计算”。错误发生在这之后,因为在最后一次调用时(当lengthA == 2
时),strassen函数没有返回值。