美文网首页
数据结构----递归

数据结构----递归

作者: Bury丶冬天 | 来源:发表于2017-11-04 16:08 被阅读0次

1.使用递归实现阶乘

int f(int n){
    if(1 == n){
        return 1;
    }else{
        return n * f(n-1);
    }
}

2.用递归求和(普通实现方式)

int sum(int n){
    if(1 == n){
        return 1;
    }else{
        return n + sum(n-1);
    }
}

3.另一种递归求和实现

//使用三目运算符
int sum(int n){
    return n>0? n + sum(n-1) : 0;
}
//不使用三目运算符
int sum(int n){
    int result=0;
    (n>0)&&(result=sum(n-1)+n);
    return result;
}

4.循环和递归的优缺点

使用递归能实现的,使用循环通常都能够实现

  • 递归
    • 容易理解
    • 速度慢
    • 浪费空间
  • 循环
    • 不易理解
    • 速度快
    • 节省空间

5.使用递归实现汉罗塔

  • 汉罗塔问题描述:

    • 将A柱子上的 n 个盘子借助 B 柱子 移动到 C
  • 伪算法:

    • A柱子上只有1个盘子

      • 直接从 A 移动到 C
    • 否则

      • 只需要将A柱子上的 n-1 个盘子借助C移动到B

      • 将A柱子上的第 n 个盘子直接移动到C

      • 将B柱子上的 n-1 个盘子借助A移动到C

  • 代码实现

#include <stdio.h>
#include <stdlib.h>

void hanluota(int n,char A,char B,char C){
    if (1==n)
    {
        printf("***将第%d个盘子从%c柱子移动到%c柱子***\n", n,A,C);
    }else{
        //将A柱子上的 n-1 个盘子借助C移动到B
        hanluota(n-1,A,C,B);
        //将A柱子上剩下的第 n 个盘子直接移动到C
        printf("---将第%d个盘子从%c柱子移动到%c柱子---\n", n,A,C);
        //将B柱子上的 n-1 个盘子借助A移动到C
        hanluota(n-1,B,A,C);
    }
}

int main(){
    hanluota(3,'A','B','C');
    return 0;
}

  • 运行结果
M:\数据结构与算法>test
***将第1个盘子从A柱子移动到C柱子***
---将第2个盘子从A柱子移动到B柱子---
***将第1个盘子从C柱子移动到B柱子***
---将第3个盘子从A柱子移动到C柱子---
***将第1个盘子从B柱子移动到A柱子***
---将第2个盘子从B柱子移动到C柱子---
***将第1个盘子从A柱子移动到C柱子***

相关文章

  • python数据结构教程 Day6

    python数据结构教程 Day6 本节重点 递归定义 递归调用的实现 简单递归的应用 一、递归 在python基...

  • 反转链表(java实现)

    链表反转 节点数据结构如下: 链表反转的两种方式:递归和非递归 递归方式如下: 非递归方式如下:

  • 递归的Java实现

    算法 数据结构——递归的运行机制:递归的微观解读 递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解...

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 数据结构-树以及深度、广度优先遍历

    数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)[https://www.cnblogs.co...

  • 文章列表

    基本数据结构 栈 队列 双端队列 无序链表 有序链表 递归 递归 搜索与排序 搜索

  • 数据结构之递归

    数据结构之递归 1.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解...

  • 揭秘-栈和递归的关系

    我与数据结构有个约会,带你领略不一样的数据结构! /*栈最常见的应用就是递归,那么递归的实现机理是什么?他的优缺点...

  • 胡思乱想说递归-上

    原来在学习数据结构和算法的时候,学习到递归,当时觉得递归就是一种自己调用自己的方法嘛,只要控制好递归的结束条件就可...

网友评论

      本文标题:数据结构----递归

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