【学习笔记】2022.10.8 算法 递归 -- 汉诺塔

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <Windows.h>

#include <stdlib.h>

#include <string.h>

#include  <time.h>

#include <math.h>

#include <assert.h>

//递归:
//1.简化的思想
//2.判断是否停止的条件
//3.递归中逐渐接近停止条件

//对汉诺塔问题的分析:(分n = 2,n = 3,n任意3种情况分析)
// 
//1.只存在两个盘子:
//  小盘子:a -> b
//  大盘子:a -> c
//  小盘子:b -> c
// 
//2.存在3个盘子
//  {
//    最上面的盘子:a -> c
//    第二个:a -> b
//    第一个:c -> b
//  } 
//   这时,前两个盘子经由c移至b,即前两个盘子:a -> c -> b
//   第三个:a -> c
//   上面两个:b -> a -> c
//
//3.当存在n个盘子
//   上面(n - 1):a -> c -> b
//   最下面:a -> c
//   上面(n - 1):b -> a -> c

long long int h_c(int n)//h_c代表将n个盘子从一个圆柱移动到另一个圆柱所需的步数
{

    assert(n >= 0);

    if (n > 0)

        return(2 * h_c(n - 1) + 1);

    else if (n == 0)

        return 0;

}

int main()
{

    for (int n = 1; n <= 9; n++)
    {

        printf("%lld\n", h_c(n));

    }

    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值