'''
递归对于初学者来说可能有点难
简单来说就是函数在内部调用自己
先写个简单的print函数了解一下,然后再写一个求解阶乘函数

这里只做一个简单的介绍了,递归的过程其实是一颗树, 叫做递归树
至于树的话就又扯远了, 属于进阶内容吧. 递归很重要, 得搞懂, 物理
位置近的可以直接找我, 复杂的递归还是很复杂的

递归从性能上来讲不如迭代, 但是递归能够大幅度简化代码, 但是也增加了
代码的理解难度, 所以在写的时候一定要小心
有几个注意点:
1. 递归的判出条件
2. 会不会陷入死递归, 就是形成一个环然后跳不出去了
'''
def print1(lst, n):
    if n == -1:
        return 
    print1(lst, n-1)
    print(lst[n])

def fac(n): #fac(n) = n*fac(n-1) 和高中学的数列很像有木有
    if n == 0:
        return 1
    return n*fac(n-1)

if __name__ == '__main__':
    lst = list(range(5)) # lst = [0, 1, 2, 3, 4]
    print1(lst, 4)
'''
0
1
2
3
4
'''
    print(fac(4))
    #output: 24





