午后,明理终于走到了迷宫中央的小亭子。他抓起芝麻糖,却没有立刻吃,而是跑回寿安面前,小脸兴奋得发红:“娘!我走出来了!”
“真棒!”寿安抱起他,“那明理说说,是怎么走出来的?”
孩子咬了口糖,含糊不清地说:“就是...就是如果左边走不通,就试中间;中间走不通,就试右边。如果都走过了,就...就...”他卡住了,显然“回溯”这个概念还超出他的理解。
“就退回去,试试前面的岔口?”寿安提示。
“对!退回去!”明理用力点头,“退到有路没走过的地方!”
寿安心中一动。这孩子总结的,不就是最简单的深度优先搜索算法雏形吗?虽然他还不会用这些词,但已经抓住了核心:试错、排除、回溯。
她把孩子搂紧了些,想起小满说过的话:“编程思维不是教代码,是教解决问题的方法。顺序、循环、条件、递归——这些概念,两岁的孩子也能在游戏里体验。”
这章没有结束,请点击下一页继续阅读!
那时她还不太信。但现在,看着儿子亮晶晶的眼睛,她信了。
“娘,爹爹什么时候回来?”明理忽然问。
“爹爹在工部忙,晚上就回来。”寿安擦掉孩子嘴角的糖屑,“等爹爹回来,你把怎么走迷宫告诉他,好不好?”
“好!”明理用力点头,“我要告诉爹爹,我学会‘如果...就...’了!”
孩子说的“如果...就...”,是小满教的简化版条件语句。最初是教他穿衣:“如果天冷,就穿厚衣服;如果天热,就穿薄衣服。”后来扩展到其他事:“如果肚子饿,就吃饭;如果不饿,就等等再吃。”现在,这个概念用到了迷宫里。
晚膳时分,小满回来了。他一身疲惫,但看到扑上来的儿子,立刻露出笑容。
“爹爹!我今天走出迷宫了!”明理急不可待地汇报。
“哦?怎么走出来的?”小满抱起他,走到饭桌旁。
明理手舞足蹈地讲起来,虽然语句颠三倒四,但基本说清了过程:遇到岔口,一条条试,不通就换,都试过就退回上一个岔口。
小满听得认真,不时点头。等孩子说完,他问:“那如果迷宫很大很大,有一百个岔口,怎么办?”
明理愣住了。显然,“一百”这个数字超出了他的理解范围。
寿安在旁盛汤,轻声说:“你问得太难了。”
“不难。”小满笑笑,从怀里掏出个小木盒,“明理,看这个。”
木盒打开,里面是几个彩色的木片,上面画着简单的图案:箭头、小房子、小树。还有一块空白的板子,板子上刻着网格。
“这是...”寿安好奇。
“迷宫游戏第二代。”小满把板子放在桌上,“纸面版的。我们可以自己设计迷宫,然后用这些木片代表‘指令’,指挥小人儿走出来。”
他先摆了个简单迷宫:起点在左下角,终点在右上角,中间只有两个岔口。然后用画着箭头的木片排成一列:“前进三步,右转,前进两步,左转,前进四步——到终点。”
明理看得入迷。
“但如果走错了呢?”小满故意让箭头指向死胡同,“小人儿撞墙了,怎么办?”
“退...退回来?”明理不确定地说。
“对,但怎么让小人儿知道该退回来?”小满又拿出几块新木片,上面画着不同的符号:一个是“?”,一个是“×”,一个是弯曲的箭头。
“我们可以这样。”他开始摆放,“前进三步,遇到岔口(?),先试右转。如果撞墙(×),就退回来(弯曲箭头),然后试左转...”
他一边摆,一边解释。寿安在旁边看着,渐渐明白了:这是在教孩子最基本的程序控制流——顺序执行、条件判断、循环回溯。只不过用的不是代码,而是彩色木片和童言童语。
明理看得目不转睛。等小满演示完,他伸出小手:“爹爹,我自己来。”
孩子摆得很慢,有时摆错了,小手悬在空中犹豫。小满不纠正,只是问:“你觉得这样小人儿能走出去吗?”