请问要如何读Python类的递归函数

修鱼 发布于 2016/10/13 15:39
阅读 590
收藏 0
class Test():

    def test(self, num):
        if num <= 0:
            return [[num]]
        left = self.test(num - 1)
        res = []
        for i in left:
            res.append([num] + i)
        return res

a = Test()
print(a.test(10))

RT,上述代码的输出为[[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]

但是我怎么分析都理解不通。以下是我无法理解的几点,还望各路大神能够指点一二,当然能给出完整的理解过程就更感激不尽了。

(1)每一次递归的时候,res不是都会被初始化为[]吗?为什么输出的res数组会记录下整个遍历过程的数字

(2)在每一次递归的时候,left的值会不会变?是怎么变的?

(3)为什么当我把代码改成

class Test():

    def test(self, num):
        if num <= 0:
            return [[num]]
        self.test(num - 1)
        res = []
        res.append([num])
        return res

a = Test()
print(a.test(10))



的时候,res就不会记录历史数字了,而是直接输出了[[10]]

以上。我觉得我还是对递归函数理解得不透彻,望各路大神帮忙,谢谢!




加载中
0
GestureWei
GestureWei
因为有left的存在
修鱼
修鱼
回复 @GestureWei : 嗯,懂了。十分感谢!
GestureWei
GestureWei
回复 @修鱼 : 从0开始倒推回来,返回到1时left是[[0]],随后res.append()将1放进去,变成[[1, 0]],res和left里面始终只有一个元素就是一个list
GestureWei
GestureWei
回复 @修鱼 : 因为有递归,是向下的,结束条件是当num<=0,所以返回的值[[10,9, ... , 0]]
修鱼
修鱼
能否说清楚一点啊。我也知道因为是Left的存在,但是我不知道Left才能在的情况下,整个函数的运行顺序是怎么样的,为什么res会返回10以外的数字
返回顶部
顶部