函数递归

什么是函数递归:

函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身

递归必须要有两个明确的阶段:

  递推:一层一层的递归调用下去,强调每进入下一层递归问题的规模都必须减小

  回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推

     开始一层一层回溯

    递归的精髓在于通过不断地重复逼近一个最终的结果

如何使用递归:

def foo(n):
    print('from foo',n)
    foo(n+1)
foo(0)
#默认会在接近1000次时报错



def bar():
print('from bar')
foo()

def foo():
print('from foo')
bar()

foo()
#默认会在接近1000次时报错
使用递归计算年龄:
# age(5) = age(4) + 2
# age(4) = age(3) + 2
# age(3) = age(2) + 2                  #每个人和上一个人年龄差2岁
# age(2) = age(1) + 2
# age(1) = 26

# age(n) = age(n-1) + 2 #n > 1
# age(1) = 26 #n = 1

def
age(n): if n == 1: return 26 return age(n-1) + 2 print(age(5))
#使用递归的方法取出下列列表中的每一个值
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]] def tell(l): for item in l: if type(item) is list: #继续进入下一层递归 tell(item) else: print(item) tell(l)
使用递归+二分法判断一个值是否在列表中(列表是由小到大的)
nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371] def search(search_num,nums):if len(nums) == 0:        #如果切不到了,代表只剩一个值而且不是要找的值 print('not exists') return             #中断函数 mid_index=len(nums) // 2     #取到列表最中间的值得索引 if search_num > nums[mid_index]: # in the right nums=nums[mid_index+1:]   #如果在右边的话把右边切出来 search(search_num,nums) elif search_num < nums[mid_index]: # in the left nums=nums[:mid_index]    #如果在左边把左边切出来 search(search_num,nums) else: print('find it') search(31,nums)
原文地址:https://www.cnblogs.com/chillwave/p/9183116.html