如何用python编写递归函数

2024-09-28 18:52:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在这个问题的解决方案上纠结了一段时间,我写了一段代码,可以按要求工作,但在编译结束时,我似乎得到了一个错误

You need to design an iterative and a recursive function called replicate_iter and replicate_recur respectively which will receive two arguments: times which is the number of times to repeat and data which is the number or string to be repeated.

The function should return an array containing repetitions of the data argument. For instance, replicate_recur(3, 5) or replicate_iter(3,5) should return [5,5,5]. If the times argument is negative or zero, return an empty array. If the argument is invalid, raise a ValueError.

我的代码如下:

def replicate_iter(times,data):

    emptyArray = []
    if not isinstance(data, int) and not isinstance(data, str):
        raise ValueError
    if times <= 0:
        print emptyArray
    if not isinstance(times,int):
        raise ValueError
    else:
        while times > 0:
            emptyArray.append(data)
            times -= 1
        return emptyArray

array = []

def replicate_recur(times,data):

    if not isinstance(data,int) and not isinstance(data,str):
        raise ValueError
    if not isinstance(times,int):
        raise ValueError
    if times <= 0 and len(array) != 0:
        return array
    elif times <= 0 and len(array) <=0:
        return []
    else:
        array.append(data)
        replicate_recur(times - 1,data)

请协助提出建议

错误消息: enter image description here


Tags: andthedatareturnifisnotarray
3条回答

首先,想想这个:

def f(times,data):
  return [] if times == 0 else f(times - 1,data) + [data]

print(f(3,5)) # [5,5,5]

现在,关于递归解决方案,(1)为了访问arrayreplicate_recur在开始时需要声明“^{”,因为变量array是在函数作用域之外声明的;(2)将递归调用“replicate_recur(times - 1,data)”修改为“return replicate_recur(times - 1,data)”,以便函数在times时实际返回一个值大于零。一般认为递归函数的形式是不可取的

根据你给出的例子,也许这就是你想要的:

array = []
def replicate_recur(times, val):
    if(isinstance(times, int) and times > 0):
        array.append(val)
        return replicate_recur(times-1, val)
    return array
print(replicate_recur(3, 5)) # [5,5,5]



array = []
def replicate_iter(times, val):
    if(isinstance(times, int) and times > 0):
        for i in range(times):
            array.append(val)
        return array
    raise ValueError
print(replicate_iter(3, 5)) #[5,5,5]

不能使用全局变量。第二次调用函数会导致错误的结果。请改用内部函数或可选参数。在

def replicate_recur(times,data, array=None):
    if array is None:
        array = []
    if times <= 0:
        return array
    array.append(data)
    return replicate_recur(times - 1, data, array)

相关问题 更多 >