【问题标题】:Incorporating a second parameter into recursion function and printing result将第二个参数合并到递归函数中并打印结果
【发布时间】:2021-09-16 21:29:13
【问题描述】:

我正在尝试编写一个函数以递归方式打印一系列计数步骤。该函数从起始值打印双加 5 序列的计数步数。

我能够仅计算 start 参数的一般递归,但我无法弄清楚如何包含我的第二个参数计数,函数应该运行多少次,以及如何让它在里面打印结果函数本身。 (我现在在外面打印)

这是我当前的代码:

def sequence_rec(start):
    if start == 1:
        return 1
    else:
        return sequence_rec(start-1)*2 + 5


for start in range(1, 10):print(sequence_rec(start))

我希望函数使用两个参数,而不仅仅是我目前拥有的一个:

def sequence_rec(start, count):
    if start == 1:
        return 1
    else:
        return sequence_rec(start-1)*2 + 5

我希望输出看起来像这样:

>sequence_rec(1, 2)

1 7 19

当前递归工作:

def sequence_rec(start, count):
    if count == 0:
        return
    else:
        value = sequence_rec(start * 2 + 5, count - 1)
    print(value)



sequence_rec(1, 3)

【问题讨论】:

    标签: python recursion parameters


    【解决方案1】:

    一种选择是将递归函数包装在执行所需打印的迭代函数中:

    >>> def print_sequence(n):
    ...     for i in range(1, n+2):
    ...         print(sequence_rec(i))
    ... 
    >>> print_sequence(2)
    1 
    7 
    19 
    >>> 
    

    一般来说,让每个函数做一件简单的事情是很好的做法;这使得通过以不同方式组合它们来轻松重用您的函数。

    也就是说,如果您希望打印是 sequence_rec 的副作用,您可以简单地这样做:

    >>> def sequence_rec(start):
    ...     if start == 1:
    ...         ret = 1
    ...     else:
    ...         ret = sequence_rec(start - 1) * 2 + 5
    ...     print(ret)
    ...     return ret
    ... 
    >>> sequence_rec(3)
    1
    7
    19
    

    (编辑)您在 cmets 中描述的函数作为递归函数没有意义,因为它没有转向基本情况。尝试迭代:

    >>> def sequence_iter(start, count):
    ...     for _ in range(count + 1):
    ...         print(start)
    ...         start = start * 2 + 5
    ... 
    >>> sequence_iter(2, 5)
    2
    9
    23
    51
    107
    219
    

    如果需要递归,策略是每次递减count

    >>> def sequence_rec(start, count):
    ...     if count < 0:
    ...         return
    ...     print(start)
    ...     sequence_rec(start * 2 + 5, count - 1)
    ... 
    >>> sequence_rec(2, 5)
    2
    9
    23
    51
    107
    219
    

    【讨论】:

    • 这确实完成了我希望主要功能做的事情(应该在最初的帖子中更清楚地说明这一点,我会修复它)我希望该函数使用两个参数来完成像这样的任务:def sequence_rec(start, count):
    • start 参数已经决定了它将经过多少次迭代,因此第二个count 参数没有任何意义。
    • 当我想开始成为一个人时,这个功能就起作用了。但是,我想添加计数参数的原因是我希望它有所不同。 IE:如果我这样做 >print_sequence_rec( 2, 5) 输出将是:2 9 23 51 107 219
    • 这不是您的递归函数的工作方式。它从start 向后计数,直到达到 1。实际上将其编写为迭代函数会更简单,但这与您开始时的完全不同。
    • 在我的回答中添加了迭代函数的代码。
    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多