【问题标题】:Printing a series based on recursion program in Python在 Python 中打印基于递归程序的系列
【发布时间】:2020-04-09 11:31:57
【问题描述】:

我正在尝试用 Python 编写一个递归程序来打印一个系列。以下是我的代码:

def pattern(n,k):
    if n > 0:
        print(n, end = ',')
        print(pattern(n-k,k), end=',')
        print(n,end = ',')
    else:
        print(n,end = ',')

pattern(12,5)

输出的格式应该是:12,7,2,-3,2,7,12,即从 n 开始,然后连续减 5 直到达到 0 或负数,然后和 5 直到达到 12

但作为输出,我得到以下信息: 12,7,2,-3,None,2,None,7,None,12,

为什么我得到的是无?如何按照上述条件将其删除并打印?

【问题讨论】:

  • 你的函数总是返回None,这意味着print(pattern(n-k,k), end=',')会打印None到你的控制台。
  • pythontutor.com/… 查看可视化以了解其打印的原因None

标签: python recursion design-patterns


【解决方案1】:

嗨,您的代码的问题是您正在尝试打印函数模式,在 Python 中默认不返回任何内容,因此您应该这样做:

def pattern(n,k):
    if n > 0:
        print(n, end = ',')
        pattern(n-k,k) # just simply call the function and do not print it
        print(n,end = ',')
    else:
        print(n,end = ',')

【讨论】:

  • 谢谢。我得到了这个问题。 !
【解决方案2】:

您的图案是从外边缘向中间递减。递归中的每一步都应该将较小的子字符串与每一边的值结合起来(只在最后打印最终结果):

def pattern(n,k):
    if n <= 0: return str(n)
    return f"{n}, {pattern(n-k,k)}, {n}"

输出:

print(pattern(16,5))

# 16, 11, 6, 1, -4, 1, 6, 11, 16

理想情况下,您应该将计算与渲染分开,以便该函数可以处理数字,并且您可以将它们格式化为最后打印的字符串:

def pattern(n,k):
    return [n] if n<=0 else [n]+pattern(n-k,k)+[n]

print(pattern(n,k)) 
# [16, 11, 6, 1, -4, 1, 6, 11, 16]

# or

print(", ".join(map(str,pattern(16,5)))) 
# 16, 11, 6, 1, -4, 1, 6, 11, 16

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 2022-01-04
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多