繁体   English   中英

创建递归几何序列函数python

[英]Creating a recursive geometric sequence function python

def geo():
    start = int(input()) # starting number
    multiplier = int(input()) # the multiplier
    length = int(input()) # how long the list should be
    for i in range(length):
        x = start * multiplier ** i
        print(x, "", end = "")
    print()

我需要基于用户输入创建一个递归几何函数。 我知道如何非递归地处理它,但是我如何递归地处理它? 提前致谢。

即:如果用户输入

start = 1
multiplier = 2
length = 5
Output: 1, 2, 4, 8, 16

编辑:感谢所有的示例家伙,我知道递归现在好多了。

删除for循环。 取而代之的是在参数中递减,以递归方式调用该函数。 创建一个以整数作为参数的函数,并在满足条件之前每次都调用它。

 def geo(start, multiplier, length, i=0):

      if length <= 0:
           exit()    #or use a return statement

      x = start * multiplier ** i 
      print(x, "", end = "") 
      print()

      geo(start, multiplier, length-1, i+1)

 start = int(input()) 
 multiplier = int(input())
 length = int(input()) 
 i=0
 geo(start, multiplier, length, i)

假设您有一个要转换为递归函数的循环:

for i in range(length):
    x = start * multiplier ** i

您需要做的是:

  1. 有停止条件( i < length
  2. 如果不满足停止条件->用下一个值再次调用

在函数之前执行此操作,因为您需要此值

length = int(input()) # how long the list should be 
start = int(input()) # starting number 
multiplier = int(input()) # the multiplier

def recursive_geo(i):
    # stop condition
    if i == length:
        return 1 # since the value will be multiplied by the previous values, you don't want to use 0 or any other value
    else:
        print(x, "", end = "")
        print()
        return start * multiplier ** i * recursive_geo(i+1)

对于任何递归函数,您都需要一个基本案例和一个一般(递归)案例。

让我们从当前代码开始获取输入,但是我们将立即调用递归函数,而不是立即计算值。

def geo():

    start = int(input()) # starting number
    multiplier = int(input()) # the multiplier
    length = int(input()) # how long the list should be
    result = geo_rec(start, multiplier, length)
    print(result)


def geo_rec(start, multiplier, length):

    print(start) # As per your current program

    # Base case check
    if length = 0:
        return start

    # Recursive case
    else:
        start = start * multiplier
        length = length - 1
        geo_rec(start, multiplier, length)

现在考虑,如果长度为0,我们将得到什么? 我们将开始-很好。 如果length = 1,我们将递归一个级别,然后返回start(这将是我们原来的start *乘数)-也很好。

请注意,在每次执行递归案例时,我们都逐步采用基本案例吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM