python - 在给定高度和值的情况下递归生成三角形格式的列表列表

标签 python python-3.x recursion multidimensional-array

我最近开始研究递归来清理我的代码并“提升我的游戏”。因此,我正在尝试做一些通常可以通过循环等简单地完成的事情,而是用递归算法来练习它们。

目前,我正在尝试生成一个二维数组,在给定一些高度 n 和将返回到 2D 的值的情况下,理论上应该类似于 NxN 形式的直角三角形-数组。

例如,假设我调用:my_function(3, 'a');n = 3value = 'a'

我返回的输出应该是:[['a'], ['a', 'a'], ['a', 'a', 'a']]

[['a'], 
 ['a', 'a'], 
 ['a', 'a', 'a']]

其中 n 确定最外层列表中有多少列表,以及有多少元素应按升序连续出现在这些内部列表中。

目前,我的代码如下所示:

def my_function(n, value):
    base_val = [value]
    if n == 0:
        return [base_val]
    else:
        return [base_val] + [my_function(n-1, value)]

不幸的是,使用我上面的示例 n = 3value = 'a',当前输出:[['a'], [[' a'], [['a'], [['a']]]]]

现在,这不必按照我上面显示的直角三角形形式进行格式化或打印(这只是我想要完成的内容的可视化)。

当然,我会回答您需要的任何澄清问题!

最佳答案

return [base_val]

好的,对于 n == 0,我们得到 [[value]]。坚硬的。呃,有点。这是包含 一个 行的结果,对吧?因此,我们的基本情况条件应该是 n == 1

现在,让我们试试递归的情况:

return [base_val] + [my_function(n-1, value)]

我们有 [[value]],我们希望以 [[value], [value, value]] 结束。同样,当我们有[[value], [value, value]]时,我们想要生成[[value], [value, value], [value, value, value]] 从它。等等。

我们的计划是现在获取一行,然后通过递归获取其余所有行,是吗?

  1. 我们将通过递归得到哪些行?答案:开始的那些,因为那些孤立的看起来仍然像三角形。

  2. 因此,我们在本地生产哪一行?答案:末尾

  3. 因此,我们如何对结果进行排序?答:我们需要从递归调用中获取结果,并在其末尾添加一行。

  4. 我们需要包装递归调用的结果吗?答:不是,已经是列表的列表了。我们将在其末尾再添加一个列表。

  5. 我们如何生成最后一行?答案:我们需要在列表中重复 valuen 次。嗯,这很简单。

  6. 我们需要换行吗?回答:是的,因为我们想将它作为单个项目附加到递归结果中——而不是连接它的所有元素。

好的,让我们重新审视基本情况。 我们可以正确处理 n == 0 吗?是的,它作为一个请求非常有意义,所以我们应该处理它。没有行的三角形看起来像什么?好吧,它仍然是一个行列表,但其中没有任何行。所以这只是 []。我们仍然可以将第一行附加到它上面,然后递归地进行。太好了。

让我们把它们放在一起:

if n == 0:
    return []
else:
    return my_function(n-1, value) + [[value] * n]

看起来 base_val 不再有用了。好吧。

我们可以用三元表达式进一步压缩:

return [] if n == 0 else (my_function(n-1, value) + [[value] * n])

关于python - 在给定高度和值的情况下递归生成三角形格式的列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575610/

相关文章:

python - 找到在 Robinhood 上获取比特币价格的 api 调用

python - 如何检查字符串中是否有特殊字符或数字但不在该字符串的末尾?

c# - 递归调用 buff/unbuff? C#Unity3D

ruby - 从字符串中删除不匹配的括号

javascript - 如何 "recursively"对调用其他作用域函数的 javascript 函数进行字符串化?

python - 从 SQLAlchemy 中声明定义的实例获取主键的通用方法

python - tensorflow 2.6 : num_parallel_calls is greater than 1 but only one CPU core is used most of the time

python - 需要帮助写入 CSV 文件 Python 3.5

python - 内存映射 ndarray 上的 numpy.std 因 MemoryError 失败

python-3.x - 为什么 private __var 可以在类之外改变? (Python 3)