python 递归问题

lucas_6666 2023-01-03 06:13:53
def func(list_=[], i=0):
    i += 1
    list_.append(i)
    if i == 5:
        return list_
    return func(list_=list_, i=i)

out = func()
print(out)
out1 = func()
print(out1)

输出:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

如果加入一段

def func(list_=[], i=0):
    if i == 0:
        list_ = []
    i += 1
    list_.append(i)
    if i == 5:
        return list_
    return func(list_=list_, i=i)

out = func()
print(out)
out1 = func()
print(out1)

就正常了:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

为什么会这样呢?

按照我的理解,在程序的第一行就已经对 list_这个列表清空了啊,为什么还要再做一次?

...全文
168 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

1、因为你两次调用func函数时,都未对list_进行传值
2、list_参数未传,而初始值又只会被初始化一次,因此第一次调用时,list_=[];第二次调用时,list_=[1,2,3,4,5]

要解决这个问题不要加i==0的判断,只需要改成:out1 = func([])

C3333_C343223 2023-01-03
  • 打赏
  • 举报
回复

很不错的内容,干货满满,已支持师傅,期望师傅能输出更多干货,并强烈给师傅文章点赞

另外,如果可以的话,期待师傅能给正在参加年度博客之星评选的我一个五星好评,您的五星好评都是对我的支持与鼓励:https://bbs.csdn.net/topics/611387568

点赞五星好评回馈小福利:抽奖赠书 | 总价值200元,书由君自行挑选(从此页面参与抽奖的同学,只需五星好评后,参与抽奖)

163

社区成员

发帖
与我相关
我的任务
社区描述
软件工程老师
python 高校 江苏省·南通市
社区管理员
  • juking@ntu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧