Python3-算法-递归

递归

  递归算法是指一般通过函数或子进程来实现,在函数或子进程的内部,直接或间接地调用自己的算法,说白了就是自己调自己

  注:

    1.在使用递归的时候,必须要有一个递归出口,即一个明确的结束条件,否则就是死循环

    2.递归算法解题通常显得很简洁,但递归的运行效率较低,一般不提倡使用

    3.递归要一层一层的进,然后在一层一层的出,所以因此想拿到最里面一层的局部变量的值,靠return是很难拿到的(至少我不会)

    4.Python3中允许的最大递归层数目前是999层

# 函数实现
def fibonacci(arg1, arg2, stop):
    print(arg1)
    arg3 = arg1 + arg2
    if arg3 < stop:    # 递归出口
        fibonacci(arg2, arg3, stop)    # 调用自己,实现递归

# 调用
fibonacci(0, 1, 100)
1.递归算法实现打印斐波那契数列
class BisectionSearch:
    """
    二分法查找类
    查找的是从小到大的顺序序列
    """
    __result = False    # 查找结果

    def __search(self, target, source):
        """
        内部递归查找算法
        :param target: 查找目标
        :param source: 数据源
        :return: None
        """
        mid_idx = int(len(source) / 2)
        if 1 != mid_idx:
            if target < source[mid_idx]:
                self.__search(target, source[:mid_idx])
            elif target > source[mid_idx]:
                self.__search(target, source[mid_idx:])
            else:
                self.__result = True
        else:
            self.__result = target in source

    def find_target(self, target, source):
        """
        对外提供的查找方法
        :param target: 查找目标
        :param source: 数据源
        :return: 是否找到
        """
        self.__search(target, source)
        return self.__result

# 调用
bs = BisectionSearch()
source_list = [i for i in range(1, 1000, 3)]
find_target = 10
result = bs.find_target(find_target, source_list)
print("查找结果:", result)
2.递归算法实现二分法查找

 

posted on 2017-03-17 11:17  AustralGeek  阅读(161)  评论(0编辑  收藏  举报

导航