递归实例(汉诺塔)

递归讲解

  1. 递归在实现过程中是借助于来实现的。
  2. 高级语言的函数调用,每次调用,系统都要自动为该次调用分配一系列的栈空间用于存放此次调用的相关信息:返回地址,局部变量等。这些信息被称为工作记录(或活动记录)。而当函数调用完成时,就从栈空间内释放这些单元,但是,在该函数没有完成前,分配的这些单元将一直保存着不被释放。
  3. 递归函数的实现,也是通过栈来完成的。在递归函数没有到达递归出口前,都要不停地执行递归体,每执行一次,就要在工作栈中分配一个工作记录的空间给该“层”调用存放相关数据,只有当到达递归出口时,即不再执行函数调用时,才从当前层返回,并释放栈中所占用的该“层”工作记录空间。请大家注意,递归调用时,每次保存在栈中的是局部数据,即只在当前层有效的数据,到达下一层时上一层的数据对本层数据没有任何影响,一切从当前调用时传过来的实在参数重新开始。

汉诺塔实例

//
// Created by a1073 on 2019/7/3.
//

#include <stdio.h>

int hanoi(int n, char x, char y, char z);
// n:代表有n个圆盘,xyz:代表圆盘从x,借助y,移动到z

int main(void) {
    char x = 'x';
    char y = 'y';
    char z = 'z';
    int num;
    printf("请输入汉诺塔中的圆盘个数:\n");
    scanf("%d", &num);
    hanoi(num, x, y, z);
    return 0;
}

int hanoi(int n, char x, char y, char z){
    if (n == 1){
        /*
         * 将“x”放置到“z”
         * 假设仅有一个,就是将圆盘从起点放置到终点*/
        printf("%c -- > %c\n", x, z);
    }else{
        hanoi(n-1, x, z, y);
        /*
         * 上一步中是将n-1个圆盘放置到中间
         * 此步骤是将第n个圆盘放置从起点放置到终点*/
        printf("%c -- > %c\n", x, z);
        /*
         * 此步骤是将中间位置的圆盘放置到终点*/
        hanoi(n-1, y, x, z);
    }
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值