`
bianku
  • 浏览: 72423 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

经典的Hanoi问题 【函数的递归调用】

阅读更多
#include<stdio.h>
void move(int no,char from ,char to );
void hanoi(int n,char A,char B,char C);
void main()
{
int n;
printf("输入disk数目: \n");
scanf("%3d ",&n);
printf("所需要的步骤为:\n");
hanoi(n,'A','B','C');
}
void move(int no,char from,char to)
{
printf("Move %3d : %c -->%c\n",no,from,to);
}
void hanoi(int n,char A,char B,char C)
{
if(n==1)
move(n,A,C);
else
{
hanoi(n-1,'A','C','B');
move(n,A,C);
hanoi(n-1,'B','A','C');
}
}

 

分享到:
评论

相关推荐

    Hanoi塔问题的一种非递归算法

    这段代码中,`move()`函数用于记录并显示盘子的移动步骤,而`hanoi()`函数则通过递归调用自身实现了Hanoi塔问题的求解。然而,这种递归方法的缺点在于它需要大量的临时存储空间,特别是在处理大规模问题时。 #### ...

    hanoi塔非递归.rar

    这种算法不是直接通过函数递归调用来解决,而是通过循环结构和数据结构来模拟递归过程。以下是使用非递归算法解决汉诺塔问题的基本步骤: 1. **定义数据结构**:首先,我们需要一个数据结构来表示盘子的状态,例如...

    函数递归调用-汉诺塔问题_c++实现汉诺塔问题_

    递归调用的关键在于每次调用都会解决规模更小的子问题,直到达到基本情况(n=1)。这个过程可以用树状结构来表示,每个节点代表一次函数调用,叶子节点对应于基本情况。随着递归的展开,整个问题得到解决。 在实际...

    汉若塔问题之递归调用.c

    总之,《汉诺塔问题之递归调用.c》这个程序通过C语言解释了如何利用递归解决汉诺塔问题,提供了一个直观的实例来学习递归编程和问题分解技巧。对初学者而言,这是一个极好的练习,有助于提升理解和应用递归的能力。

    汉诺塔问题 C语言实现 递归调用

    // 调用Hanoi函数开始移动盘子 return 0; } ``` ### 总结 汉诺塔问题的C语言实现展示了递归的强大和优雅。通过递归函数的自调用,复杂的问题被逐步分解为更简单的小问题,直到基本情况被解决。这种思路在解决...

    HANOI塔问题的非递归解

    1. **函数的循环调用**:通过循环结构来代替递归调用,这样可以避免因深度过大导致的栈溢出问题。 2. **堆栈的使用**:在每次需要“递归”调用时,不是真正地调用新的函数实例,而是将当前状态保存到栈中,然后更新...

    汉诺塔问题的非递归算法

    在`main()`函数中,用户输入圆盘数量,然后调用这些函数来执行汉诺塔问题的非递归解。 通过非递归算法解决汉诺塔问题,我们能够理解如何用有限的步骤完成看似复杂的问题,这在理解和设计计算机算法中具有重要意义。...

    Hanoi非递归实现

    在汉诺塔问题中,我们可以用栈来存储每个步骤的操作,而不是像递归那样利用函数调用栈。 以下是非递归实现汉诺塔问题的基本步骤: 1. 定义一个栈,用于存储待处理的盘子及其目标位置。 2. 初始化栈,将所有盘子从...

    hutc-双色Hanoi塔问题 参考代码

    - 首先递归调用`hanoi`函数,将除最底层盘子之外的所有盘子从柱子`a`移动到柱子`c`,利用柱子`b`作为辅助。 - 调用`move`函数,将最底层的盘子从柱子`a`移动到柱子`b`。 - 再次递归调用`hanoi`函数,将之前移动到...

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

    这种方法模拟了递归的过程,但不实际调用递归函数。它使用一个栈来存储未完成的移动操作,每次从栈顶取出一个操作并执行。如果当前盘子可以直接移动到目标柱,就执行移动;否则,反向添加操作,将盘子先移动到中间柱...

    汉诺塔递归与非递归两种算法的代码与结果对比

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它涉及到将一叠盘子从一根柱子移动到另一根柱子,遵循特定的规则。在这个问题中,有三根柱子A、B和C,以及若干个大小不一的盘子,最初所有盘子都在柱子A...

    Java程序设计基础:调用方法-方法的递归调用.pptx

    递归调用是解决某些问题的有效手段,尤其是当问题可以被自然地分解为更小规模的子问题时。然而,需要注意的是,递归可能会导致大量的函数调用栈的占用,从而可能导致性能问题或栈溢出。因此,在实际应用递归时,需要...

    hanoi 递归实现 清楚明了

    而`hanoi`函数则实现了上述递归策略,其中的递归调用`hanoi(n-1, a, c, b)`和`hanoi(n-1, b, a, c)`分别对应于解决问题的第一步和第三步。 通过以上分析与代码实现,我们可以清晰地理解并实践汉诺塔问题的递归解法...

    Hanoi_Hanoi问题算法_

    汉诺塔(Hanoi Tower)问题是一个经典的递归与分治算法问题,源自19世纪由法国数学家爱德华·卢卡斯提出。问题描述如下:有三根柱子A、B、C,柱子A上从下到上依次放着n个大小不一的圆盘,现在需要将所有圆盘从A柱...

    hanoi_递归算法_sky6nm_

    4. 递归调用:对于n&gt;1的情况,先将n-1个圆盘从from移动到aux(使用to作为辅助),然后将第n个圆盘从from移动到to,最后再将n-1个圆盘从aux移动到to(使用from作为辅助)。 例如,`hanoi`函数的实现可能如下: ```c...

    广义表操作的递归汇总PPT学习教案.pptx

    在汉诺塔问题中,`hanoi`函数通过递归调用来实现盘子的移动。 此外,斐波那契数列还可以通过求解通项公式来避免递归,这样可以得到一个闭合形式的解,提高计算效率。 总结来说,递归是编程中的一种强大工具,尤其...

    递归问题的二叉树求解方法.pdf

    在这个实现中,`move`函数用于打印单次圆盘移动的信息,而`hanoi`函数则实现了递归逻辑,通过递归调用自身来完成n个圆盘的移动。 #### 结论 通过将递归问题与二叉树结合,不仅可以简化递归算法的设计,还能增强...

    C++递归函数(汉诺塔)代码

    汉诺塔游戏是一种经典的逻辑问题,它展示了递归思想在解决复杂问题时的强大能力。在这个游戏中,有三根柱子和一堆盘子,盘子大小不一,且较大的盘子不能放在较小的盘子上面。游戏的目标是将所有盘子从第一根柱子(源...

Global site tag (gtag.js) - Google Analytics