Hanoi塔问题(递归)

#include<iostream>
#include<cstdio>
using namespace std;
int sum;
int f(int n,char a,char b,char c){

    if(n == 1){printf("1 from a to b\n");sum++;return sum;}
    else {
        f(n-1,a,c,b);
        printf("%d from %c to %c\n",n,a,c);sum++;
        f(n-1,b,a,c);
    }
}
int main(){
    int cases,  n;
    cin>>cases;
    while(cases--){
        cin>>n;
        sum = 0;
        f(n,‘a‘,‘b‘,‘c‘);
        printf("sum = %d\n",sum);
    }
    return 0;
}

  

时间: 2024-12-11 10:28:46

Hanoi塔问题(递归)的相关文章

栈和递归之Hanoi塔

hanoi塔 代码 <pre name="code" class="cpp">#include<stdio.h> void move(char x,int n,char y) { static int k=1; printf("Step %d : %d from %c >>->> to %c \n",k++,n,x,y); } void hanoi(int n,char A,char B,char

用递归实现 hanoi塔

// hanoi.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" void move(int n,char moveStart,char moveEnd){ printf("move %d from %c to %c\n",n,moveStart,moveEnd); } void hanoi(int n,char moveStart,char moveTemp,char moveEnd){ if (n == 1) { move

汉诺塔问题递归算法分析

汉诺塔问题递归算法分析: 一个庙里有三个柱子,第一个有64个盘子,从上往下盘子越来越大.要求庙里的老和尚把这64个盘子全部移动到第三个柱子上.移动的时候始终只能小盘子压着大盘子.而且每次只能移动一个. 1.此时老和尚(后面我们叫他第一个和尚)觉得很难,所以他想:要是有一个人能把前63个盘子先移动到第二个柱子上,我再把最后一个盘子直接移动到第三个柱子,再让那个人把刚才的前63个盘子从第二个柱子上移动到第三个柱子上,我的任务就完成了,简单.所以他找了比他年轻的和尚(后面我们叫他第二个和尚),命令:

从&quot;汉诺塔&quot;经典递归到JS递归函数

前言 参考<JavaScript语言精粹> 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决.递归函数就是会直接或者间接调用自身的一种函数,一般来说,一个递归函数调用自身去解决它的子问题. "汉诺塔"经典递归问题 "汉诺塔"是印度的一个古老传说,也是程序设计中的经典的递归问题,是一个著名的益智游戏: 题目如下: 塔上有三根柱子和一套直径各不相同的空心圆盘,开始时源柱子上的所有圆盘都按从大到小的顺序排列.目标是通过

Demo:Hanoi塔问题到底是如何运行的?

Hanoi问题以递归移动柱上碟子的方法解决问题,但各柱上碟片的变化到底是如何变化的? 下面的程序给出了演示效果,便于程序员理解. #include <stdio.h> #define N 6 int Vals[3][N+1]; int movecnt = 0; void out() { for(int i = 0; i < 3; i++) { for(int j = 1; j <= N; j++) if (j <= Vals[i][0]) printf("%d &q

【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

递归汉诺塔 双层递归 #include <iostream> void han(int n, char A, char B, char C) { static int num = 1; std::cout << "第" << num << "次"; num++; if (n<1) { return; } else { han(n - 1, A, C, B); std::cout << A <&l

用C语言实现汉诺塔自动递归演示程序

用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 github地址:https://github.com/404name/C-game 0.主体思路 输入要递归的汉诺塔数目,在原来的汉诺塔基础上新增move_play函数展示递归,用next数组存储每种移动状态.对应的从哪到哪可自动对应相应的移动方式自动移动. 1.变界面大小依照输入递归数改变 init函数按

n阶Hanoi塔问题

假设有三个命名为x.y.z的塔座,在塔座x上插有n个直径大小各不相同.依小到大编号为1.2...n的圆盘,要求将x塔座上的n个圆盘移至z上,并仍按同样的顺序叠排,圆盘移动时应遵守下列规则: (1)每次只能移动一个圆盘: (2)圆盘可插在x.y和z中任何一个塔座上: (3)任何时刻都不能将一个较大的圆盘压在较小的圆盘上面. 如下图所示为3阶Hanoi塔问题的初始状态. 完整代码: 1 #include <stdio.h> 2 3 void Hanoi(int n, char x, char y,

Acdream 1219 The Towers of Hanoi Revisited(递归汉诺塔问题)

传送门 The Towers of Hanoi Revisited Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description You all must know the puzzle named "The Towers of Hanoi". The puzz