输出流-关于汉诺塔递归输出cout的问题

问题描述

关于汉诺塔递归输出cout的问题
#include<iostream>
using namespace std;
void hanoi(int n,char a,char b,char c)
{
    if(n==1)
        cout<<n<<" "<<a<<"->"<<c<<endl;
    else{
        hanoi(n-1,a,c,b);
        cout<<n<<" "<<a<<"->"<<c<<endl;//指这条代码
        hanoi(n-1,b,a,c);
        }
}
int main()
{
    int n;
    while(cin>>n)
    hanoi(n,'A','B','C');
    return 0;
}

请问为什么那条cout输出语句(代码中注释部分)为什么在中间 而不是在hanoi(n-1,b,a,c);后面或者有两个语句后面都cout。
谢谢~

解决方案

因为把n—1个圆盘从a移到b后,就可以把第n个圆盘从a移到c了。

时间: 2024-08-31 13:14:59

输出流-关于汉诺塔递归输出cout的问题的相关文章

汉诺塔--递归和非递归实现

1 #include <iostream> 2 #include <stack> 3 #include <assert.h> 4 using namespace std; 5 6 class HANOI 7 { 8 private: 9 struct HanioData{ 10 int x;//所在盘子编号 11 int y;//移动后所在编号 12 int n;//盘子数 13 }; 14 HanioData hd; 15 static int c; 16 stack

Java使用递归法解决汉诺塔问题的代码示例_java

汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上(如图). 有一个和尚想把这n个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上.在移动过程中可以利用B座,要求打印移动的步骤.如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C. 如果有2个盘子,可以先将盘子1上的盘子2移动到B:将盘子1移动到c:将盘子2移动到c.这说明了:可以借助B将2个盘子从A移动到C,当然,

【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语言汉诺塔-汉诺塔可以用递归吗 不找规律的话

问题描述 汉诺塔可以用递归吗 不找规律的话 汉诺塔可以用递归吗 不找规律的话 求大神指点 递归应该怎么用才能解决汉诺塔 谢谢了 解决方案 汉诺塔本来就应该用递归,不用递归反倒麻烦,需要用堆栈模拟.http://blog.csdn.net/kkkkkxiaofei/article/details/8333644 解决方案二: #include<stdio.h> void move(int n,char a,char b,char c) { if(n==1) printf("t%c-&g

java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码_java

程序如下: 复制代码 代码如下: View Code  /*  * Hanoi塔游戏 问题描述:  * 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.  * 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照  * 大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小  * 顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在  * 三根柱子之间一次只能移动一个圆盘.  *   * fuction:实现 hanoi塔  *       

C语言递归实现汉诺塔算法

汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1) 直接将A柱子上的圆盘从A移动到C else 先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上 直接将A柱子上的第n个圆盘移动到C柱子上 最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子上 该递归算法的时间复杂度为O(2的n次方),当有n个圆盘时,需要移动圆盘2的n次方-1次 操作系统:ubuntu 编译软件:gcc 结果截

递归问题:二汉诺塔

汉诺塔问题是法国数学家Edouard Lucas于1880年提出的.它已经成为计算机科学家的热门话题,因为该问题的解决方案极好的展示了递归的简洁性.该问题包含三个珠子和一些带有中孔的圆盘,这些圆盘可以在柱子间移动,每个圆盘具有不同的直径.刚开始时,所有圆盘按照尺寸对方在一个柱子上,即最大的圆盘放置在底部,我们可以使用另外一个柱子作为放置圆盘的临时位置,但是必须遵循以下3条规则:1一次只能移动一个圆盘 2不能将大圆盘放置在小圆盘的顶部 3除正在柱子间移动的圆盘外,其他所有圆盘都必须放置在某个柱子上

学习笔记(菜鸟日志)-&amp;quot;汉诺塔&amp;quot;的递归过程

记得大一上C语言课程的时候我还刚刚会用迅雷下载电影,听不懂,也没认真听过,匆匆几个星期上完了考试.关于"汉诺塔"这样的字眼,也是仅仅记得是在那个书里面出现过而已.最近偶然拿起C语言的书,再次看到了"汉诺塔"递归算法的例子,转好几圈,终于搞明白了.现在花点时间重新这里下思路,一则方便自己以后回忆,二则希望能给和我一样菜的新手们提供参考,三则希望有高人出现对文中不足的地方加以斧正!    关于"汉诺塔"这个古老的益智游戏如果不清楚的,到百度百科一下!

递归解决汉诺塔问题

前言:汉诺塔问题是源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在第三根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 我们用递归算法来解决这个问题,在解决之前首先介绍一下什么是递归算法. 1.递归算法 在解决一些复杂问题时,为了降低问题的复杂程序,通常是将问题逐层分解,最后归结为一些最简单的问题.这种将问题逐层分解的过程,并没有对问题进行求解,而