在Python中打印基于递归程序的系列

在Python中打印基于递归程序的系列,python,recursion,design-patterns,Python,Recursion,Design Patterns,我正在尝试用Python编写一个递归程序来打印一个系列。以下是我的代码: def模式(n,k): 如果n>0: 打印(n,结束=',') 打印(模式(n-k,k),结束=',') 打印(n,结束=',') 其他: 打印(n,结束=',') 模式(12,5) 输出形式应为:12,7,2,-3,2,7,12,即从n开始,然后依次减去5,直到达到0或负数,然后求和5,直到达到12 但作为输出,我得到以下结果: 12,7,2,-3,无,2,无,7,无,12, 为什么我一个也得不到?我如何删除它并按照上

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

def模式(n,k):
如果n>0:
打印(n,结束=',')
打印(模式(n-k,k),结束=',')
打印(n,结束=',')
其他:
打印(n,结束=',')
模式(12,5)
输出形式应为:
12,7,2,-3,2,7,12
,即从n开始,然后依次减去5,直到达到0或负数,然后求和5,直到达到12

但作为输出,我得到以下结果:
12,7,2,-3,无,2,无,7,无,12,


为什么我一个也得不到?我如何删除它并按照上述条件打印它?

您好,您的代码的问题是您试图打印函数模式,在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 = ',')

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

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

def pattern(n,k):
    if n <= 0: return str(n)
    return f"{n}, {pattern(n-k,k)}, {n}"
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
def模式(n,k):

返回[n]如果你的函数总是返回
None
,这意味着
print(模式(n-k,k),end=',')
将打印
None
到你的控制台。查看可视化,了解为什么要打印
None
谢谢。我明白了!
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