You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用嵌套for循环填充满足递推规则的n阶矩阵

n*n递推矩阵填充修复方案

你原有代码的核心问题有两个:一是行填充的循环错误嵌套在了第一行初始化的循环内部,执行逻辑完全混乱;二是递推索引关系没理清,强行用切片赋值反而提高了出错概率。

核心规则梳理

先明确0索引下的矩阵赋值规则,和你给出的示例完全匹配:

  • 全0初始化矩阵后,所有列索引小于行索引的位置已经天然为0,不需要额外赋值
  • 第0行(第一行)的填充逻辑你已经实现正确,单独执行即可
  • 对于第j行(j≥1,也就是第二行及以后),列坐标k≥j的位置,取值满足:M[j,k] = 正上方元素M[j-1,k] + 左上角元素M[j-1,k-1]

修正后代码

from numpy import zeros, sqrt

def function(x,n):
    M = zeros([n,n])  # 生成n*n全0矩阵
    a = (1+x)/2       # 第一行初始值计算参数
    g = sqrt(x)       
    # 填充第一行
    for i in range(n):
        M[0,i] = a
        a = (a+g)/2
        g = sqrt(a*g)
    # 从第二行(索引j=1)开始逐行填充
    for j in range(1, n):
        # 仅处理当前行列号≥j的位置,跳过已经是0的下三角区域
        for k in range(j, n):
            M[j, k] = M[j-1, k] + M[j-1, k-1]
    return M

结果验证

当第一行初始化结果为[1,2,3,4]、n=4时,代码输出为:

[[ 1.  2.  3.  4.]
 [ 0.  3.  5.  7.]
 [ 0.  0.  8. 12.]
 [ 0.  0.  0. 20.]]

和你给出的示例前三行完全匹配,递推逻辑正确。

不要在逻辑不清晰的时候强行用切片批量赋值,逐位置遍历的写法对初学者更友好,索引关系一目了然,也不会出现切片范围写错、越界等问题。等你对索引逻辑足够熟悉之后,再尝试优化成切片写法即可。

内容的提问来源于stack exchange,提问作者Orm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:36:25