首页 > 解决方案 > 递归……我卡住了

问题描述

问题是这样的:

打印一个以 N 开头的数字序列,不使用循环,其中

A[i+1] = A[i] - 5,如果 A[i]>0,否则 A[i+1]=A[i] + 5 重复直到 A[i]=N

So for input = 16 
output is 16 11 6 1 -4 1 6 11 16
input = 10 
output is 10 5 0 5 10

我正在尝试分析解决方案,一旦数字变为负数,它是如何工作的。

这是解决方案:

def print_pattern(n):
    print(n, end=' ')
    if n > 0:
        print_pattern(n - 5)
    else:
        return
    print(n, end=' ')

T = int(input())

for case in range(T):
    N = int(input())
print_pattern(N)
print()

标签: pythonpython-3.xrecursion

解决方案


如上所述,这似乎是一个无限递归。对于输入 = 16:

16 -> 11 # A[i+1] = A[i] - 5 (> 0)
11 -> 6  # A[i+1] = A[i] - 5 (> 0)
6 -> 1   # A[i+1] = A[i] - 5 (> 0)
1 -> -4  # A[i+1] = A[i] - 5 (> 0)
-4 -> 1  # A[i+1] = A[i] + 5 (<= 0)
1 -> -4  # A[i+1] = A[i] - 5 (> 0)
-4 -> 1  # A[i+1] = A[i] + 5 (<= 0)
etc.

所以你永远不会得到"16 11 6 1 -4 1 6 11 16". 重新阅读您的问题并验证规则。


推荐阅读