【发布时间】:2023-04-10 17:04:02
【问题描述】:
这是过去考试(编程基础)中的一个问题,我不知道如何解决(经过 2 个多小时的尝试):
编写一个方法void fillingSumOfNeighbours(int[][]m),假设m 是一个矩阵,其中最后一列和一行已经被填充(非零),用总和m[i][j]=m[i][j+1]+m[i+1][j]+m[i+1][j+1] 填充剩余的值。这个方法必须是递归的!
到目前为止,我可以以正确的方式填充矩阵,但如果不使用字段计数器就无法使递归有限(对我来说似乎不正确,因为使用字段计数器停止递归需要定义班级)。有没有办法定义直接递归方法只能在该方法内运行的次数?
基本上应该这样做:
_ _ 1
_ _ 1
1 1 1
_ _ 1
_ 3 1
1 1 1
_ 5 1
_ 3 1
1 1 1
_ 5 1
5 3 1
1 1 1
13 5 1
5 3 1
1 1 1
【问题讨论】:
-
您知道,“尝试超过 2 小时”并没有那么令人印象深刻。有些问题需要几天、几个月、.. 甚至几代!!好吧,无论如何 - 我推荐好的 ole P&P - 纸笔 .. 但我必须说 2 小时是一个很好的最低限度;)
-
虽然我是编程新手,但我对问题并不陌生(我在我的硕士课程中)。我并不是说要令人印象深刻。我这样说是为了让人们可以通过了解 x 难度问题所花费的时间来衡量我的理解/菜鸟水平(并调整答案)。
-
如果我正确理解了您的代码,您将在每次递归调用时填写整个数组。这似乎是很多重复的工作。
-
对这个问题使用递归是愚蠢的——这个问题本质上没有递归。尝试在没有基准的情况下解决它。
-
您的解决方案的主要问题是“递归”解决方案并不是真正的递归。您正在迭代地解决问题。
标签: java recursion multidimensional-array matrix