首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言解决问题【C语言&

问题背景 (Tower of Hanoi),又称河内,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...运用函数递归解决问题 函数递归的思想就是将复杂的问题简单化 我们可以先考虑2个圆盘的情况下,先a->b然后a->c最后b->c 我们在考虑3个圆盘的情况,用图片表示 通过这两个例子我们可以观察到要将...n个盘子移动到C 就要先将n-1个盘子移动到B,由此我们可以已得到一个思路 代码实现的思路主要为三步: 假设移动n个盘子 1.将A柱上的n-1个盘子借助C柱移动到B柱 2.再将A柱上仅剩的最后一个盘子移动到...("%c->%c ", pos1, pos2); } void Hanoi(int n,char pos1,char pos2,char pos3)//pos1起始柱 pos2为工具柱 pos3为目标柱...pos1, pos3); Hanoi(n - 1, pos2,pos1, pos3); } } 小结 当我们遇到这种比较复杂的问题时,一定不要忘了使用函数递归来解决问题,将那些复杂的问题抽丝剥茧,逐渐简单

11110

经典递归解决_c语言递归算法

算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。...当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。...当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C),然后将A塔上的3号最大的盘子移动到C,最后将B塔上的两个盘子借助A移动到C塔上。...当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A移动到C塔上。...#include //第一个为初始,中间的为借用,最后一个为目标 int i=1;//记录步数 void move(int n,char from,char to) //

34620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    问题java代码_问题编程算法

    package com.wangyq.datastructrue.arithmetic; import java.util.Arrays; import java.util.Stack; /** * 分治算法...(tier - 1, stack2, stack1, stack3); //将在B柱子的n-1盘子通过A柱子移动到C柱子 } } } 结果: : 第一根柱子[4, 3, 2, 1] 第二根柱子...[] 第三根柱子[] : 第一根柱子[4, 3, 2] 第二根柱子[1] 第三根柱子[] : 第一根柱子[4, 3] 第二根柱子[1] 第三根柱子[2] : 第一根柱子...[2] : 第一根柱子[4, 1] 第二根柱子[3, 2] 第三根柱子[] : 第一根柱子[4] 第二根柱子[3, 2, 1] 第三根柱子[] : 第一根柱子[]..., 1] : 第一根柱子[2, 1] 第二根柱子[3] 第三根柱子[4] : 第一根柱子[2, 1] 第二根柱子[] 第三根柱子[4, 3] : 第一根柱子[2]

    32630

    分治算法(问题)

    算法介绍: 分治算法,其实就是把一个大问题看成若干个小问题,解决了所有的小问题,那么大问题就解决了,原问题的解就是子问题解的合并,之前说的归并排序、快速排序,都用到了分治思想。 二....分治算法的基本步骤: 分解:将原问题分解成若干个相互独立的、规模较小的、容易求解的、与原问题形式相同的子问题; 解决:直接求解子问题或者递归求解子问题; 合并:将各个子问题的解合并为原问题的解。...分治算法经典应用:问题 1. 问题介绍: ? ? 问题介绍 2. 怎么玩? ? 玩法 3. 思路分析: 我们先给3根针标上号,左边的是A,中间的是B,右边的是C。...代码实现: public class HanoiTower { /** * 问题 * @param plateNum 盘子的数量 * @param...打开4399或者7k7k,搜索,选择盘子的数量,运行代码,按照代码打印的结果去玩这个游戏,就知道对不对了。

    93320

    算法--递归--问题

    递推公式: 上部 n - 1 个 A 到 B; 最底下 1 个 A 到 C ; 上部 n - 1 个 B 到 C; 终止条件: n = 1 时,A 到 C; /** * @description:...递归问题 * @author: michael ming * @date: 2019/4/7 20:10 * @modified by: */ #include using...hanoi(n-1, middleP, startP, destP, counts); //n-1个从中间-->目的地 } } int main() { cout << "请输入层数...问题 题目 在经典问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。...示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2, 1, 0] 示例2: 输入:A = [1, 0], B = [], C = [] 输出:C =

    45810

    问题算法介绍

    其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。...⑴按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。...⑶反复进行⑴⑵操作,最后就能按规定完成的移动。...所以结果非常简单,就是按照移动规则向一个方向移动金片: 如3阶的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C #Python 代码实现def move(n, a, b, c):...if n==1: print a,'-->',c return else: move(n-1,a,c,b) print a,'-->',c

    95790

    递归算法简单理解

    一.历史背景:(Tower of Hanoi),又称河内,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...二.递归算法:这里n,表示总共有几个盘子 ,a表示当前的,b表示中转c表示目标,(注意:他们递归时,中转会,当前的,目标会改变)这里用一个静态变量sum,来记住盘子移动的次数。...2.有很多盘子时(n个),移动盘子的递归思想可以大概直接抽象为: 把(n-1)个盘子看作一个整体,借助C 从A-->B(具体移动过程中靠函数递归来实现)再把最底部那个盘子,借助B从 A-->C。...void hanoi(int n, String a, String b, String c) { /** n表示总共有几个盘子 * a表示当前的,b表示中转,...c表示目标,(注意:他们递归时会改变) */ if (n == 1) { System.out.println(a + "-->" + c);

    9610

    汇编语言、与C语言、实现----

    题意描述:      用汇编语言实现。只需要显示移盘次序,不必显示所移盘的大小,例如: X>Z,X>Y,Z>Y,X>Z,....。...(n阶Hanoi问题)假设有三个分别命名为X、Y、Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。...的实现,用C语言来解释就是函数递归调用实现 如果转为汇编实现,就直接进入栈进行相应的操作就行(当然你也可以用汇编语言宏实现高级的递归调用..)...C语言方式: void move(char one,char three){ //one 移到thre printf("%c--->%c",one,three); } void HANOI(...} } // end of void HANOI(5,'X','Y','Z'); //即可5阶从X盘移到Z盘 递归操作仔细想想就可以了,这样栈的操作逐渐明朗

    1.7K20

    C语言经典递归题目 -- 问题

    目录 题目描述 画图分析 思路总结 代码实现 总结 题目描述 问题起源于一个传说 又被称为河内,传说,在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。...印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的。...---- 画图分析 由简到繁,我们先从最简单的情况来分析: ~~只有一个盘子的时候: 只有一个盘子我们直接把它从A柱移到C柱就行,此时移动次数是1,移动顺序是 A->C ~~有两个盘子的时候:...>%c ", pos1, pos2); //把pos1的盘子移动到pos2 } //Hanoi函数,用来实现,其中n表示盘子的个数,pos1表示起始柱,pos2表示中转柱,pos3表示目标柱...pos3); //n为3 printf("\n"); Hanoi(4, pos1, pos2, pos3); //n为4 printf("\n"); return 0; } 总结 知道了的逻辑后

    42200

    函数递归 - (C语言实现)

    思路: 有1个盘子时: 2^1 - 1次 A->C ---- 有2个盘子时: 2^2 - 1次 A->B A->C C->B 有3个盘子时: 2^3 - 1次 A->C A->B C-...>B A->C B->A B->C A->C ---- 3个盘子的简单模拟: ---- ---- 采用递归思想: 初始柱子、目标柱子、中间柱子是相对具体的盘子而言的,但最终所有的盘子均要按规则移动到...C盘之上。...从初始柱子A经过中间柱子C移动到 目标柱子B。 2.对于下面的这1个盘子需要移动到C柱子上。 故C柱子此时是目标柱子,B柱子是中间柱子。...故B柱子是这个总体的初始柱子,这个总体最终需要移动到C柱子上,故C柱子此时便是目标柱子,而A柱子是中间柱子。 看做从初始柱子B经过中间柱子A移动到目标柱子C。 ---- 3.

    23210

    递归算法流程图_算法递归表达式

    (Hanoi) 编程实现把 A 的 n 个盘子移动到 C(盘子编号是 [1, n] ) 每次只能移动1个盘子 大盘子只能放在小盘子下面 1、 — 1个盘子 2、 — 2个盘子...3、 — 3个盘子 3、 — 思路 其实分 2 种情况讨论即可 (1)当 n == 1时,直接将盘子从 A 移动到C (2)当 n > 1时,可以拆分成3大步骤 ①将 n– 1...个盘子从 A 移动到B ② 将编号为 n 的盘子从 A 移动到C ③将 n– 1 个盘子从 B 移动到C ✓ 步骤①③ 明显是个递归调用 4、 — 实现 public...class Hanoi { public static void main(String[] args) { new Hanoi().hanoi(3,"A","B","C"); } /** *...将2号盘子从A移动到B 将1号盘子从C移动到B 将3号盘子从A移动到C 将1号盘子从B移动到A 将2号盘子从B移动到C 将1号盘子从A移动到C T(n) = 2 ∗ T(n) − 1 + O(1) 因此时间复杂度是

    72320

    php递归算法经典实例_问题递归算法c语言

    利用PHP实现 (又称河内)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...简而言之,有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动...php // 算法 // 实现逻辑 --> 递归 (关系可以由 n=2 比较容易想出) // 把 第 n-1 个由 A 移动到C // 把 第 n 个 由 A 移动到 B // 把 第 n-1 个由...""; // 把n-1 由C 移动到 B hanuota($n-1, $c, $b, $a); } } $step = 0; hanuota(4, 'A', 'B', 'C'); echo...B 移动到 C 把第 1 个由A 移动到 C 把第 4 个由A 移动到 B 把第 1 个由C 移动到 B 把第 2 个由C 移动到 A 把第 1 个由B 移动到 A 把第 3 个由C 移动到 B 把第

    39910

    问题

    /*有n个盘子,都在A上,盘子大小均不等,要求大的在下,小的在上, 有A, B, C三个地方,要求将这n个盘子从A移动到C处,每次只能移动 一个盘子*/ /*思路: 当有两个盘子时,只需将...1个盘子从A移动到B,便可直接将最后一个 盘子移动到C,然后将上一个盘子移动到B,结束任务;依此类推,对于 n个盘子,只需将上面n-1个盘子借助C移动到B,再将第n个盘子移动到...C,最后 将那n-1个盘子借助A移动到C,便可完成任务*/ #include void hannoi(int n, char A, char B, char C) {...if(n == 1) printf("move dish %d from %c to %c\n",n, A, C); else { hannoi(...n - 1, A, C, B); /*将第n个盘子上面n-1个盘子借助C移动到B*/ printf("move dish %d from %c to %c\n",n, A, C);

    55430

    问题

    问题   最近面试题遇到过的问题,当时竟然懵逼了,不会了!!大学研究的问题竟然都忘光了,于是抓紧捡起来。然而在网上看了看博客,发现非递归算法还真挺多。下面总结了一下。...一、递归算法   1、递归算法优缺点:递归算法算是最易于理解也是最容易实现的,但是对内存的消耗也是巨大的,因为递归需要系统堆栈来保存调用函数地址、形参、局部变量、返回值等数据,也就是回调N次,就要保存N...但是递归算法结构简洁,清晰。基于这个原因,我先介绍一下递归算法。   2、递归算法思路:     1)将N-1个盘子从A柱移动到B柱或者将N-1个盘子从B柱移动到A柱。     ...15 } 16 }   二、非递归算法   这里使用了便利二叉树的思路 1)算法推论描述:     这里用4个盘子举例 ?     进行整合: ?...2)算法规律:    根据上面的二叉树的图,可以看到如下规率:     A.盘子数(N)=二叉树的高度(H)     B.第n层序号能被2的(n-1)次方整除,但不能被2的n次方整除(n从下至上增加)

    65810

    Hanoi(

    说明: (河内)(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard...Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小 至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒...,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当 盘子全数搬运完毕之时,此将毁损,而也就是世界末日来临之时。...如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递归处理。 ?...演算法: Procedure HANOI(n, A, B, C)  {     IF(n == 1)      {         PRINT("Move sheet " n " from " A "

    96020
    领券