美文网首页
递归算法

递归算法

作者: 简子逍 | 来源:发表于2019-07-25 22:03 被阅读0次

递归算法思想

特点
  1. 递归过程一般通过函数或子过程来实现。
  2. 递归算法在函数或子过程的内部,直接或间接地调用自己的算法。
  3. 递归算法实际上是把问题转换成规模缩小的同类问题的子问题,然后递归调用函数或子过程来表示问题的解。
注意点
  1. 递归是在过程或函数中调用自身的过程。
  2. 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
  3. 递归算法通常显得很简洁,但是运行效率较低,所以一般不提倡用递归算法设计程序。
  4. 在递归调用过程中,系统用栈来存储每一层的返回点和局部量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序。

斐波那契数列

递归写法:

def fib_num(n):
    num_list = [0, 1]
    if n <= 1:
        return num_list[n]
    return fib_num(n - 1) + fib_num(n - 2)

n = 10
for i in range(n):
    print(fib_num(i), end=' ')  # 0 1 1 2 3 5 8 13 21 34 

Python 特有写法:

def fib(n):
    a, b = 0, 1
    while n:
        print(a, end=" ")
        a, b = b, a + b
        n -= 1

fib(10)  # 0 1 1 2 3 5 8 13 21 34 

汉诺塔问题

i = 1

def move(n, mfrom, mto):
    global i
    print("第%d步:将%d号盘子从%s -> %s" % (i, n, mfrom, mto))
    i += 1

def hanoi(n, A, B, C):
    if n == 1:
        move(1, A, C)
    else:
        hanoi(n - 1, A, C, B)
        move(n, A, C)
        hanoi(n - 1, B, A , C)

n = 2
hanoi(n, 'A', 'B', 'C')

# 输出
第1步:将1号盘子从A -> B
第2步:将2号盘子从A -> C
第3步:将1号盘子从B -> C

阶乘问题

def fact(n):
    if n <= 1:
        return 1
    else:
        return n * fact(n - 1)

n = 5
print(fact(n))  # 120

相关文章

  • 快速幂模板

    递归算法 非递归算法

  • python递归算法、尾递归算法及优化

    文章概述 递归算法和尾递归概述递归算法的优化 递归算法 介绍:递归算法是计算机编程领域非常重要的一种算法,采用分而...

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

  • Java递归算法详解

    递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的...

  • 矩阵链乘法

    递归算法: 迭代算法: 分析 递归算法:规模为n的问题,有n个递归,每个递归又有相应矩阵个数个递归,故T(n)=T...

  • 【Python】(十一)从汉诺塔看Python中的递归问题

    递归的原则 递归算法必须具有基本情况。 递归算法必须改变其状态并向基本情况靠近。 递归算法必须以递归方式调用自身 ...

  • 一、算法

    目标 递归算法查找算法算法分析十大排序算法 递归算法 什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用...

  • 欧几里得算法

    非递归算法 默认输入 m>=n 递归算法

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

  • 二叉树三种遍历的实现(递归)

    前序递归遍历算法:访问根结点-->递归遍历根结点的左子树-->递归遍历根结点的右子树 中序递归遍历算法:递归遍历根...

网友评论

      本文标题:递归算法

      本文链接:https://www.haomeiwen.com/subject/fywkrctx.html