函数递归

Posted msj513

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数递归相关的知识,希望对你有一定的参考价值。

函数递归

什么是函数递归

函数的递归是函数嵌套调用的一种特殊形式,

特殊在调用一个函数的过程中又直接或者间接地调用该函数本书

递归本质就是一个循环的过程,

但是递归必须满足两个原则:

  1. 每进入下一层递归,问题的规模必须有所减少

  2. 递归必须有一个明确的结束条件或者说有一个明确的进入下一层递归的条件

 

并且递归有两个明确的阶段

回溯:一层一层地递归调用下去

递推:在某一层结束掉递归,然后一层一层返回

为何要用递归

在某些情况下,基于递归来使用重复的过程比while循环更加简单

如何用递归

def age(n):
    if n == 1:
        return 18
    return age(n-1)+2

res=age(5)
print(res)
list1=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
def func(l):
    for item in l:
        if type(item) is list:
            # 将item当作一个新列表传给功能本身
            func(item)
        else:
            print(item)
func(list1)

二分法

二分法是算法的一种,算法是如何高效地解决问题的思路

nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]  # 从小到大排列的数字列表
def binary_search(find_num,nums):
    print(nums)
    if len(nums) == 0:
        print(not exists)
        return

    # 功能
    mid_index = len(nums) // 2
    if find_num > nums[mid_index]:
        # in the right
        nums=nums[mid_index+1:]
        # 重新运行功能,传入新列表
        binary_search(find_num,nums)
    elif find_num < nums[mid_index]:
        # in the left
        nums=nums[:mid_index]
        # 重新运行功能,传入新列表
        binary_search(find_num,nums)
    else:
        print(find it)


# binary_search(97,nums)
binary_search(94,nums)

 

以上是关于函数递归的主要内容,如果未能解决你的问题,请参考以下文章

vue递归组件的一些理解

哈斯克尔。我很困惑这个代码片段是如何工作的

如何在自定义PyYAML构造函数中处理递归?

JavaSE 方法的使用

JavaScript - 代码片段,Snippets,Gist

Java基础之方法的调用重载以及简单的递归