zhouhao888 2018-12-12 09:58 采纳率: 0%
浏览 1213

小新自学python遇到递归问题,有一点不明白

首先教程里说到递归就是函数自己调用自己,这个还能理解,然后把练习的代码放上。

def sum_numbers(num):
    if num == 1:
        return 1

    temp = sum_numbers(num - 1)

    return num + temp

result = sum_numbers(5)
print(result)
  • 如题在函数,是当数==1的时候就跑出,相当于每一次执行到 temp = sum_numbers(num - 1)的时候只要不==1就会 一直调用函数,因为if里面有return.那么最后一条return num + temp这一条。应该不再 执 行 了。但实际运行的时候还是有执行 的。

  • 当num == 1的时候到了return num + temp的时候这时候temp=1 ,num = 2

  • 但是我不明白num =2是怎么得出 的。再执行 num = 3 temp=3 有点迷糊 了

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-12-12 12:25
    关注

    道理很简单,函数的参数的作用域在函数内,

    sum_numbers(num - 1)
    在外侧调用函数看来,传进去的是num - 1

    在这个函数执行的内部,num变量的值等于外侧num-1

    函数递归,每个递归内的参数和变量,都是独立的。

    好比

    def foo(a):
        print(a)
    
    b = 1
    foo(b)
    

    这段代码,从外侧看,传的是b
    到了函数内,b不见了,a就是b。

    评论

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)