递归

递归的特性

1.必须有一个明确的结果

2.每次进入一个更深一层的递归时,问题都应比上一次少。

3.递归的效率不高,递归层次过多会导致栈溢出(在计算机中,函数是通过调用栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧,由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

递归出现在一个函数的调用中不断的循环自己知道获取一个值。

def foo(n):  #定义函数
    if int(n/2) == 0: #判断条件取整
        return n#返还值
    n = int(n/2) #n重新 赋值
    re = foo(n) #重新调用函数
    return re #获取最终返还值
foo(10) #第一次调用函数

在这个过程中第一次调用函数 n = 10的时候发现  10/2 = 5 取整不等于0 所以 第一次不返还值 函数向下运行,这个时候对n重新赋值 n = n/2 然后 重新调用自身函数 re = foo(5) 此时重新判断如此循环直到 n=1 的时候  1/2 = 0.5 区中 n等于0 ,此时return n=1,然后将n=1 每层返回给上一次

我对递归的理解是不要将实现局限在一个函数范围内,没执行一次函数你可以默认的在下面重新再添加一个代码,到时候就代码获取的值就是你本次函数返还的值。

 

posted on 2018-11-12 11:02  Big"G"  阅读(88)  评论(0)    收藏  举报