首页 > 编程知识 正文

c语言程序设计,英文字母c的发音

时间:2023-05-05 22:41:13 阅读:153233 作者:690

目录:一、什么是递归。 首先来看看递归的例子2。 递归的基本原理2、mgdgs问题1.mgdgs的故事2。 返回编程,mgdgs问题主要是解决这个问题。 3。 如何解决mgdgs问题解决mgdgs问题要运用递归思想。 这里举四层mgdgs的例子。 4。

一.什么是递归

方法调用自己的行为是递归的。 递归需要结束条件。 否则,就是无限递归。

1 .让我们看一下递归的例子。 该程序的Fact方法从大到小依次为调用自己,从大到小依次为http://www.Sina.com/1,疲劳骑在大地上,然后为number的阶乘

staticintfact(intnum ) if ) num=1) {return num; }else{returnnum*fact(num-1 ); //呼叫自己,这一步是关键}2.递归的基本原理以下是对《C#图解教程》递归的描述:

除了调用其他方法外,方法也可以调用自己。 我们将其称为返回。 调用方法本身的机制与调用其他方法完全相同,每次调用方法时都会将新的堆栈帧推入堆栈顶部。

我个人认为,递归是将你要做的事情抽象为可以用有限的手数解决的方法,如果用某个手数不能解决,就调用这个方法,直到可以解决(结束递归的条件)为止。

让我们再看一下关于递归的更具体的例子。

二、mgdgs问题1.mgdgs的故事mgdgs由法国数学家的精心制作的便当,他曾谱写过印度的古老传说:

在世界中心的贝纳莱斯(印度北部)的圣庙里,真的吗? 木板上插着三根宝石针。 印度教主神梵天在创造世界时,一针见血地从大到小穿了64枚金片。 这叫做mgdgs。 白天和晚上,一个skddt根据以下规律移动着这些金属片。 一次只移动一枚,无论针对哪个针,小片都必须在大片上。 skddt们预言,当所有的金属片从梵天所穿的针上移动到另一根针上时,世界将在一声霹雳中消亡,梵塔、寺院、伉生也将一同死亡。

2 .返回编程。 mgdgs的问题主要是解决这个问题。 有a、b、c三根针,a上从小到大放着n级盘子,必须从a上的所有盘子移动到c的盘子。

条件为递归,随时为一次只能移动一个盘子

mgdgs问题求出了将盘子从a移动到c的合计移动次数。

这是我以前追踪4楼mgdgs运行顺序画的笔记

事实证明,没什么用。

要理解递归,就必须停止理解递归,停止跟踪所有步骤。

解决问题的是计算机。 您只需明确每一步如何传递给计算机,递归地在两个层之间如何传递,以及递归终止的条件即可。

3 .如何解决mgdgs问题解决mgdgs问题需要递归思想。 这里以四层mgdgs为例。 要完成四层mgdgs,必须先将第四层盘子从a柱放在C柱上,而要将第四层盘子放在C柱上,必须将上面的三层盘子放在B柱上。

那么,要把这第三层盘子移到B柱,必须先把第三层盘子移到B柱。

要把第三层盘子移到B柱,必须把第二层盘子移到C柱。

要将第二层盘子移动到C柱,需要将第一层盘子移动到B柱。

把一个mgdgs移动到另一个柱子上不简单吗?

这样就解决了问题,第四层盘子可以移动到C柱上了。

而且剩下的三层mgdgs也按照以上思想,可以移动到C柱。

4 .具体代码实现

把大象放进冰箱需要几步吗

打开冰箱门让大象进来关上冰箱门让mgdgs进入C柱需要几步?

把下层上面的盘子放在B柱上,把最下面的盘子放在C柱上,把B柱的盘子放在C柱上,抽象如下。

将第n-1层盘子从起点移动到暂存区,将第n层盘子从起点移动到终点,将第n-1层盘子从暂存区移动到终点,在此处创建Move方法以填充盘子staticvoidmove(intpile,char src,char src

最外层的Move法是将pile层mgdgs从src经过tmp移动到dst

现在把大象放进冰箱里。小盘子必须在大盘子上面

1 .将冰箱门移动(pile-1、src、dst、tmp ); 该Move将pile-1层mgdgs从src经过dst移动到tmp

2 .将大象推入Move(1、src、tmp、dst )此move完成后,将最底层的mgdgs板块从src 在Move方法里面调用Move方法来解决之后的问题:移动到dst

3 .关门move(pile-1

, tmp, src, dst);

这层Move完成的是把pile-1层mgdgs从tmp经过src移动到dst

Move方法完整代码:

static void Move(int pile, char src, char tmp, char dst) { if (pile == 1)//pile=1问题就好解决了 { Console.WriteLine($"{src} --> {dst}"); steps++; return; } Move(pile - 1, src, dst, tmp); Move(1, src, tmp, dst); Move(pile - 1, tmp, src, dst); }

每一层Move方法都有他自己的起点、暂存区和终点,我们只需要把上一层的起点、暂存区和终点传过去就行了。

5. 完整代码

以下是完整代码:

using System;namespace Hanoi{ class Program { public const int MAX_VALUE = 30;//声明最大值常量 public static int steps = 0; static void Main(string[] args) { int levels = 0; Console.Write($"输入mgdgs层数(1~{MAX_VALUE}): "); levels = int.Parse(Console.ReadLine()); if (levels > 0 && levels < MAX_VALUE) { Move(levels, 'A', 'B', 'C'); Console.WriteLine($"一共移动了{Program.steps}次。"); Console.ReadKey(); return; } Console.WriteLine("输入范围错误"); Console.ReadKey(); } static void Move(int pile, char src, char tmp, char dst) { if (pile == 1)//pile=1问题就好解决了 { Console.WriteLine($"{src} --> {dst}"); steps++; return; } Move(pile - 1, src, dst, tmp); Move(1, src, tmp, dst); Move(pile - 1, tmp, src, dst); } }}

运行结果如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。