当前位置:首页 » 编程语言 » 汉诺塔递归算法python

汉诺塔递归算法python

发布时间: 2024-11-19 18:26:17

Ⅰ 给小孩学编程有必要吗(少儿编程到底要不要学)

果果进入小学以后,周围人关于要不要学编程,什么时候开始学的讨论越来越多了,
特别是艺体类特长生取消后新增了科技特长生,
这架势一出,之前的各路牛娃们纷纷由奥数转向信奥。
说实在的,我也曾不只一次考虑要不要给果果报个编程课试试。
那是什么阻止了我呢?
简单来说就是娃没时间,
我们如今把运动放在了首位,每天放学后的一个小时花在了运动上,周末每天最少3个小时都在运动(加上来回路上时间,5个小时打底),
但凡有点空闲时间,娃自己还想做点手工,画画,看点自己喜欢的书什么的,实在是没时间再加一门编程了。
娃没时间,我有时间的时候,我时不时就在b站听几耳朵python基础,HTML+CSS, JAVA什么的。
倒不是准备自己学了教娃,而是想了解下编程到底是个啥,以及我娃到底适不适合学。
经过这阵子的简单了解,我对娃要不要学编程,以及什么时候学,有了新的理解。
这一篇,就来和大家分享一些我的一些不成熟的小想法。
对于不同年龄段的孩子和家庭,大家对编程的理解和大致印象是不一样的。
01
学龄前:编程玩具和编程思维
比如学龄前家庭,一提起编程,大家想起来的基本都是各种编程玩具,
这些玩具,基本也就实现一两个编程理念或概念,
比如:路径设计,路径循环,自动巡航等。
幼儿园就能玩的编程机器人大盘点,玩着就能把编程学了吗?
这些基础的编程理念,我觉着和果果一年级做的浅奥思维题还是比较相似的,
条理性,
有序性。
孩子不难理解,但做对,或者机器路径摆对还是不容易的。
那这些编程玩具有没有必要玩呢?
这个就见仁见智了,一方面我个人觉着这些概念和思维孩子大了之后自然而然就理解了,即使不玩也没什么影响。
另一方面,果果之前玩过那种根据颜色识别路线的编程小火车(很简单的功能,大人眼里看简直是没什么可玩的),后来看杂志时她了解到自动驾驶,
娃脑洞大开说可以在马路上画上不用颜色,然后车辆去识别马路,也能实现自动驾驶!
就又感觉玩具没白玩,既然存在就有存在的价值。
02
学龄前-小学四年级:Scratch
等孩子再大一点以及小学低年级,这时候家庭对编程的理解就比较具象了,
一般大家都默认为这时候的编程就是Scratch图形化编程。
一直以来,我都认为Scratch是比较简单的,通过拖拖拽拽把编程思维体现出来就好了,但在我去仔细研究时,发现难度也不小。
Scratch等级内容
一级、二级的内容,和奥数思维很像,推理,等量代换,理条理。
scratch一级、二级部分试题
而到了三级、四级,编程方面的内容就增加了很多,
比如变量、列表、函数的概念,还有在程序中加入了3种不同结构,
Scratch三、四级部分考题
但这三种程序结构,我个人感觉和路径设计一样,理解起来都不难的,
这些逻辑和桌游比较像,平时爱玩桌游的孩子肯定是一说就懂了。
难的是在理解基础概念的前提下,有条理地、全面性地理清楚,这对孩子来说一直都是个不小的挑战。
那么小低年级的孩子有必要学习Scratch吗?
这个问题仍然是要看个体的,就我家果果来看,目前阶段,我们还是以打好数学基础和数学思维为主。
在语文阅读界,一直以来大家都在努力从“学习阅读”,向“通过阅读去学习” 过渡,
这两年编程界,有一句类似的话是从“学习编程思维”,到“通过编程思维去思考”,
在我看来,Scratch编程思维的基础思维,和数学思维的重叠部分还是比较多的,比如:
流程思维,
结构化思维,
可视化思维.
所以我家小低阶段还是以数学思维打好基础为主吧。
而有时间,有精力的家庭,图形化编程和数学并不冲突,同步开启,相辅相成,对于孩子理解结构和函数都有帮助。
03
小学四年级+:Python, C++
到了小高年级,我周围的娃们不少已经开始学代码编程了,比如Python,C++,
Python等级内容
C/C++等级内容
目前大家对于这两种编程语言,普遍的一个共识是:
如果为了升学,优先选C++,因为信奥的语言就是C++,
如果是为了培养孩子兴趣,拓展思维,优先选Python, 因为它比较简单,且能实现的功能也很强大,孩子成就感会比较高。
目前很多高中开设的编程课中,基本学的都是Python。
我自己在听Python的课时,感觉Python的基本语法还是比较好理解的,
相当于把Scratch阶段可视化的逻辑用规范化的编程语言给写出来。
像我这种门外汉,听一耳朵课程之后,虽然写不出来,但看代码,基本是可以看懂的。
难的部分,在于算法
递归实例:汉诺塔
而算法,我个人感觉是又回到了数学上。
最后咋感觉要不要学编程,又回到了要不要学数学上?
(和校内数学肯定是有区别的,可以类比为奥数)
那孩子要不要学Python或者C++呢?
相信大家心里已经都有答案了。

Ⅱ 哪位大佬有python汉诺塔的教程

学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅.
网上找了一张汉诺塔的图片,汉诺塔就是利用用中间的柱子把最左边的柱子上的圆盘依次从大到小叠上去,说白了就是c要跟原来的a一样

童鞋们理解了汉诺塔的递归算法原理后,可以写个程序来试试,这里只是学到Python的递归所以用了Python,童鞋们可以用其他语言实现,汉诺塔确实能帮助理解递归原理,递归在程序设计中的重要性不言而喻啦!

Ⅲ python汉诺塔非递归

python汉诺塔非递归,运用list和function知识的解答

无论stack还是recursion都是从汉诺塔的原理去解决问题,但如果已经想清楚汉诺塔的原理,其实只用把答案print出来就行了

先找规律:

一层:A-->C


两层:A-->B

-------

A-->C

-------

B-->C


三层:A-->C

A-->B

C-->B

-------

A-->C

-------

B-->A

B-->C

A-->C


注意到n层汉诺塔有(2**n) - 1 个步骤,而中间的一步(两个分割线之间)都是“A-->C”,中间的这一步将这一层汉诺塔的解分为上下两个部分

仔细观察,上面一部分是将上一层的解中所有的B,C交换,下面一部分是将上一层的解中所有的A,B交换

例如第二层是:

A-->B

A-->C

B-->C

第三层上部分就将第二层的解的C换成B,B换成C,即得出:

A-->C

A-->B

C-->B

第三层下部分就将第二层的解的A换成B,B换成A,即得出:

B-->A

A-->C

C-->B

这个规律同样适用于第一层,和以后的所有层

然后就好办了,代码如图:

代码

其中convertAB,convertBC就是AB交换,BC交换的函数,这两个函数可以自己定义,用中间变量即可

热点内容
wifi无法上网怎么配置网络 发布:2024-11-19 20:25:38 浏览:437
我的世界网易手机好玩的pvp服务器 发布:2024-11-19 20:09:29 浏览:331
安卓手机微信怎么改号 发布:2024-11-19 19:56:13 浏览:91
python的字符串输出 发布:2024-11-19 19:48:41 浏览:630
android的签名 发布:2024-11-19 19:47:10 浏览:489
padavan内核修改编译 发布:2024-11-19 19:46:53 浏览:219
apex正在加载并编译着色器闪退 发布:2024-11-19 19:40:13 浏览:282
android导图 发布:2024-11-19 19:37:48 浏览:975
云服务器慢慢变卡 发布:2024-11-19 19:32:33 浏览:664
如何找到服务器参数 发布:2024-11-19 19:19:33 浏览:678