郭芮 福建省廈門第二中學(xué)
《普通高中信息技術(shù)課程標(biāo)準(zhǔn)(2017年版)》(以下簡(jiǎn)稱“新課標(biāo)”)的頒布實(shí)施與新教材的使用,使普通高中信息技術(shù)教學(xué)由傳統(tǒng)的注重技能實(shí)操轉(zhuǎn)向更加強(qiáng)調(diào)學(xué)生計(jì)算思維等核心素養(yǎng)的培養(yǎng)。筆者結(jié)合新課標(biāo)的要求,梳理出計(jì)算思維包含的幾個(gè)重要要素:分解、分析、抽象、建模、算法設(shè)計(jì)、自動(dòng)化。在教學(xué)中,教師可通過算法設(shè)計(jì)和編程實(shí)踐來培養(yǎng)學(xué)生對(duì)這些要素的理解和應(yīng)用,以培養(yǎng)他們的邏輯思維、創(chuàng)新能力和問題解決能力。
遞歸問題是指在解決某個(gè)問題時(shí),可以通過調(diào)用自身來實(shí)現(xiàn)的問題。遞歸問題通常需要滿足兩個(gè)條件:①基本情況。定義遞歸結(jié)束的條件,即最簡(jiǎn)單的情況,無需再次遞歸調(diào)用自身,直接返回結(jié)果。②遞歸關(guān)系。將原問題分解成一個(gè)或多個(gè)規(guī)模較小的子問題,并通過遞歸調(diào)用自身來解決這些子問題。
遞歸問題與計(jì)算思維要素之間存在緊密的關(guān)聯(lián),具體如下表所示。
本文以“青蛙跳臺(tái)階”問題為例,漸進(jìn)式地分為簡(jiǎn)單、中級(jí)、復(fù)雜三種情況?!昂?jiǎn)單”問題引出遞歸算法。“中級(jí)”和“復(fù)雜”問題考查學(xué)生對(duì)遞歸算法的理解和運(yùn)用。
活動(dòng)1:一只青蛙一次可以跳上一級(jí)臺(tái)階,也可以跳上二級(jí)臺(tái)階,求這只青蛙跳上n級(jí)臺(tái)階總共需要多少種跳法。
(1)問題分解(如下頁圖1)
圖1
當(dāng)n=1時(shí),只有1種跳法;當(dāng)n=2時(shí),有2種跳法;當(dāng)n=3時(shí),有3種跳法;當(dāng)n=4時(shí),有5種跳法;當(dāng)n=5時(shí),有8種跳法……
(2)問題分析
提取重復(fù)邏輯:1,2,3,5,8……當(dāng)n=n時(shí),可以用倒推的方式來分析問題。青蛙跳上最后一級(jí)臺(tái)階的方式只有兩種情況,要么是1級(jí)跳,要么是2級(jí)跳。若青蛙用1級(jí)跳的方式跳到最后一級(jí)臺(tái)階,那么它前面跳的方法共有f(n-1)種;若用2級(jí)跳,則共有f(n-2)種。所以,兩種情況加起來就是總種數(shù):f(n)=f(n-1)+fn(n-2)(n≥2)(終止條件:n=1,n=2)。
(3)抽象建模(如圖2)
圖2
(4)編程實(shí)現(xiàn)(如圖3)
圖3
設(shè)計(jì)意圖:借助游戲問題引入課堂教學(xué),活躍課堂氣氛,迅速集中學(xué)生的注意力。在問題解決中,自然引出本課課題——遞歸法。
活動(dòng)2:一只青蛙一次可以跳上一級(jí)臺(tái)階,也可以跳上二級(jí)臺(tái)階……還可以跳上n級(jí)臺(tái)階,求這只青蛙跳上n級(jí)臺(tái)階總共需要多少種跳法。
(1)問題分解
通過上一道題的練習(xí),學(xué)生已經(jīng)對(duì)遞歸算法有了初步認(rèn)知,并且理解抽象的遞歸表達(dá)。所以用f(n)表示青蛙跳上n級(jí)臺(tái)階的跳法數(shù),設(shè)定f(0)=1。
當(dāng)n=1時(shí),有一種跳法,f(1)=1。
當(dāng)n=2時(shí),有兩種跳法,一階跳和二階跳:f(2)=f(1)+f(0)=2。
當(dāng)n=3時(shí),有三種跳法,第一次跳出一階后,后面還有f(3-1)種跳法;第一次跳出二階后,后面還有f(3-2)種跳法;第一次跳出三階后,后面還有f(3-3)種跳法:f(3)=f(2)+f(1)+f(0)=4。
當(dāng)n=4時(shí),有四種跳法,第一次跳出一階后,后面還有f(4-1)種跳法;第一次跳出二階后,后面還有f(4-2)種跳法;第一次跳出三階后,后面還有f(4-3)種跳法,第一次跳出四階后,后面還有f(4-4)種跳法:f(4)=f(3)+f(2)+f(1)+f(0)=8。
……
(2)問題分析
提取重復(fù)邏輯:當(dāng)n=n時(shí),共有n種跳的方式,第一次跳出一階后,后面還有f(n-1)種跳法;第一次跳出二階后,后面還有f(n-2)種跳法;第一次跳出n階后,后面還有f(n-n)種跳法,最終得出公式為:f(n)-f(n-1)=f(n-1)→f(n)=2*f(n-1)(n≥2)(終止條件:n≤1)。
(3)抽象建模(如圖4)
圖4
(4)編程實(shí)現(xiàn)(如圖5)
圖5
遞歸法解決問題的方法:①二要素——遞推與回歸。②找到結(jié)束條件。③遞歸算法的實(shí)現(xiàn)方式(遞歸算法是數(shù)值層層調(diào)用實(shí)現(xiàn)的,函數(shù)先由上向下調(diào)用,當(dāng)達(dá)到最底層后,再將數(shù)值層層向上返回)。④程序結(jié)構(gòu)——函數(shù)和分支結(jié)構(gòu)。函數(shù)定義遞歸問題本身,分支結(jié)構(gòu)解決終止條件和調(diào)用規(guī)律。
設(shè)計(jì)意圖:在前一個(gè)活動(dòng)實(shí)踐的基礎(chǔ)上,給出遞歸算法解決問題的方法,對(duì)學(xué)生已經(jīng)構(gòu)建好的模型框架進(jìn)一步梳理,幫助學(xué)生形成遞歸算法解決問題的思想和方法。
活動(dòng)3:一只青蛙一次可以跳上一級(jí)臺(tái)階,也可以跳上二級(jí)臺(tái)階……還可以跳上m級(jí)臺(tái)階,求這只青蛙跳上n級(jí)臺(tái)階總共需要多少種跳法。
(1)問題分解
結(jié)合上一道題的思路,得出:f(n)=2f(n-1)-f(n-m-1)。
(2)問題分析
分析1:如果n≤m,因?yàn)橹荒芡咸荒芡绿源笥趎的都不可以跳,那么這個(gè)問題就直接退到問題2。
分析2:如果n>m,要想跳到n級(jí)臺(tái)階,可以從n-1級(jí)跳一步上來,或者從n-2級(jí)跳兩步上來……或者從n-m級(jí)跳m步上來,所以可以找出遞歸公式。
(3)抽象建模
當(dāng)n=m時(shí),和上一題的解答思路一致。當(dāng)n>m時(shí),f(n)=2f(n-1)-f(n-m-1)。
(4)編程實(shí)現(xiàn)(如圖6)
圖6
設(shè)計(jì)意圖:經(jīng)過前面的活動(dòng),讓學(xué)生基本掌握遞歸法解決問題的方法。
根據(jù)新課標(biāo)中對(duì)計(jì)算思維教學(xué)的建議,通過遞歸算法的學(xué)習(xí)讓學(xué)生從實(shí)際問題出發(fā),感知遞歸、發(fā)現(xiàn)規(guī)律;理解遞歸算法的基本思想,運(yùn)用恰當(dāng)?shù)姆绞椒治龊统橄蠼?,梳理出問題結(jié)構(gòu),并通過恰當(dāng)?shù)某绦蛘Z言和程序控制結(jié)構(gòu)實(shí)現(xiàn)遞歸算法。因此,本案例通過由淺入深的青蛙跳臺(tái)階問題,讓學(xué)生在一個(gè)個(gè)活動(dòng)中反復(fù)體會(huì)遞歸問題“來”與“去”的過程,體驗(yàn)使用Python語言實(shí)現(xiàn)遞歸程序設(shè)計(jì)的方法,感受算法效率的重要性,增強(qiáng)學(xué)生運(yùn)用算法思想解決實(shí)際問題的能力,培養(yǎng)計(jì)算思維。
深度學(xué)習(xí)是指學(xué)生的已有經(jīng)驗(yàn)或知識(shí)與新的經(jīng)驗(yàn)和知識(shí)之間產(chǎn)生了連接,繼而獲得深層次的學(xué)習(xí)動(dòng)機(jī)、親身體驗(yàn)和高階思維,對(duì)學(xué)生產(chǎn)生深遠(yuǎn)影響的學(xué)習(xí)。在本案例中,學(xué)生在同一情境、不同難度的任務(wù)驅(qū)動(dòng)下,構(gòu)建和遷移遞歸思想,從而逐漸形成應(yīng)用遞歸算法與程序設(shè)計(jì)解決現(xiàn)實(shí)問題的高階思維能力。
算法是抽象后的概念,遞歸算法又是不斷拆解和回歸的過程,更加抽象。對(duì)于學(xué)生而言,在頭腦中將拆解和回歸的過程復(fù)現(xiàn)是比較困難的,因此,教師可引導(dǎo)學(xué)生借助數(shù)字化平臺(tái)可視化觀察遞歸算法的過程、在線檢驗(yàn)編程結(jié)果、查找更好的解決方案等,在幫助學(xué)生提高信息意識(shí)的同時(shí),強(qiáng)化學(xué)生的數(shù)字化學(xué)習(xí)能力,助力計(jì)算思維培養(yǎng)。
教師可以借助數(shù)字化平臺(tái)中的“考試”“搶答”“作業(yè)”等功能,對(duì)學(xué)生的課前基礎(chǔ)、課堂成果、課后練習(xí)、階段性學(xué)習(xí)等進(jìn)行綜合評(píng)價(jià)。通過完善教學(xué)評(píng)價(jià)體系,幫助學(xué)生了解自身的優(yōu)劣勢(shì),培養(yǎng)計(jì)算思維。
本文以遞歸算法為例,通過趣味的游戲問題,詳細(xì)探討如何在教學(xué)實(shí)施過程中針對(duì)問題分析開展“抽象”,并在“抽象”的基礎(chǔ)上實(shí)現(xiàn)“建模”,最終培養(yǎng)和發(fā)展學(xué)生的計(jì)算思維,完成對(duì)算法大概念核心原理的理解,并在一定程度上反作用于數(shù)學(xué)關(guān)鍵能力的培養(yǎng),以推進(jìn)拔尖創(chuàng)新人才培養(yǎng)的持續(xù)、健康發(fā)展。