郝斌数据结构(3)----递归

定义:一个函数直接或者间接调用其本身。
递归要满足的条件:
1. 递归必须有一个明确的终止条件
2. 该函数所处理的数据规模必须在递减
3. 这个转化必须是可解的
循环(迭代)和递归的关系:
什么时候用循环?什么时候用递归?什么是尾递归?
这里写图片描述
任何一个迭代的例子都有它的递归表示法,反之亦然
分治思想:
各个小模块和大的模块结构相同。
折半查找:
减少查找序列的长度,分而治之进行关键字的查找。

举例:
1. 求阶乘
if(1==n)
return 1;
else
return n*f(n-1);
2. 1+2+3+…+100的和(与上面类似)
3. 汉诺塔

#include <stdio.h>
#include <iostream>
using namespace std;

void hannuota(int n, char A, char B, char C)// 只是形参 不是具体的ABC三个柱子
{
    //伪算法
    //如果是1个盘子 
    //直接将A柱子上的盘子从A移到C
    //最后将B柱子上的n-1个盘子借助A移到C

    if (1 == n)
    {
        printf("将编号为%d的盘子直接从%c柱子移到%c柱子", n, A, C);
    }
    else
    {
        hannuota(n - 1, A, C, B);
        printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n", n, A, C);
        hannuota(n - 1, B, A, C);
        printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n", n, A, C);
    }
}

递归的应用
树和森林就是以递归的方式定义的
树和图的很多算法都是以递归来实现的
很多数学公式就是以递归的方式来实现的
斐波拉契序列:1 2 3 5 8 3 21 34…

线性结构总复习
逻辑结构:线性—-数组和链表
栈和队列是一种特殊的线性结构

        非线性:树和图

物理结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值