Python:递归函数,用于计算两个向量之差的和

Python:递归函数,用于计算两个向量之差的和,python,recursion,matrix,vector,sum,Python,Recursion,Matrix,Vector,Sum,我有一个矩阵M和初始向量v0。我想写一个递归函数来执行M*v{I},这样我就可以找到v{I}和v{I+1},这样向量差的所有元素之和都小于0.45 例如: 将numpy导入为np M=np.数组([[0,0,0,0.5,0,0],[1,0,0,0,0,0,0.5,0],[0,1,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]) M=M.aType(浮动) v0=np.数组([1/6,1/6,1/6,1/6,1/6,1/6]) v1=np.点(M,v0) v2

我有一个矩阵
M
和初始向量
v0
。我想写一个递归函数来执行
M*v{I}
,这样我就可以找到
v{I}
v{I+1}
,这样向量差的所有元素之和都小于0.45

例如:

将numpy导入为np
M=np.数组([[0,0,0,0.5,0,0],[1,0,0,0,0,0,0.5,0],[0,1,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0])
M=M.aType(浮动)
v0=np.数组([1/6,1/6,1/6,1/6,1/6,1/6])
v1=np.点(M,v0)
v2=np.点(M,v1)
v3=np.点(M,v2)
v4=np.点(M,v3)
v5=np.点(M,v4)
x=np.绝对值(v4-v5)
打印(总和(x))
这里,我想要的输出是
sum(x)=0.42
的值以及向量
v4
v5
。到目前为止我已经试过了,但还是卡住了

def diff_sum(M,v):
v1=np.点(M,v)
x=np.绝对值(v-v1)
x=总和(x)
如果x<0.45:
返回(x、v、v1)
其他:
微分和(M,np.dot(M,v1))
返回(x、v、v1)

我不确定为什么需要递归,但这可以通过循环轻松完成:

def diff_sum(M,vi1):
    er=1
    while (er>0.45):
        vi=vi1.copy()
        vi1=M @ vi
        er=np.abs(vi1-vi).sum()
    return vi,vi1,er
vn1,vn,er=diff_sum(M,v0)

用numpy递归?这就像粉笔和奶酪的混合,请不要:(看起来你想要的是一个循环,而不是一个递归函数。)