曹香



摘要:本文主要針對(duì)當(dāng)前高中信息技術(shù)課程中關(guān)于迭代算法教學(xué)中存在的諸多問(wèn)題,結(jié)合高中生的認(rèn)知特點(diǎn),在迭代算法教學(xué)過(guò)程中聚焦教學(xué)策略進(jìn)行實(shí)踐研究,從而提出可視化抽象概念、分析結(jié)構(gòu)提煉模型、循序漸進(jìn)、錯(cuò)誤中提升等教學(xué)策略。這些策略有助于教師提高課堂教學(xué)效率,有益于激發(fā)學(xué)生的學(xué)習(xí)興趣,有利于提升學(xué)生的計(jì)算思維。
關(guān)鍵詞:高中信息技術(shù);迭代算法教學(xué);計(jì)算思維
中圖分類(lèi)號(hào):G434? 文獻(xiàn)標(biāo)識(shí)碼:A? 論文編號(hào):1674-2117(2023)14-0049-04
迭代算法是程序設(shè)計(jì)中的核心算法之一,它是利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),進(jìn)行問(wèn)題解決的一種方法,其在數(shù)值計(jì)算、圖像處理、機(jī)器學(xué)習(xí)等方面有著廣泛的應(yīng)用。雖然學(xué)生在初中階段也接觸了一些算法,但對(duì)迭代涉及很少,而迭代在高中數(shù)學(xué)學(xué)科中也有許多應(yīng)用,如等差數(shù)列、等比數(shù)列等數(shù)學(xué)概念,根據(jù)遞推式求通項(xiàng)公式,牛頓二分法求方程的解等都是迭代思想的體現(xiàn)。因此,對(duì)于高中生來(lái)說(shuō),學(xué)習(xí)并掌握迭代算法有著重要意義。Python是一種簡(jiǎn)單易學(xué)的編程語(yǔ)言,下面,筆者以Python語(yǔ)言為例,探討迭代算法的教學(xué)策略。
在過(guò)去的程序設(shè)計(jì)教學(xué)中,學(xué)生對(duì)迭代算法的理解存在許多困難,原因是多方面的:其一,迭代算法涉及一些數(shù)學(xué)和計(jì)算機(jī)科學(xué)的抽象概念,如迭代變量、累加、循環(huán)等,這些概念對(duì)于初學(xué)者來(lái)說(shuō)不夠直觀,需要時(shí)間去理解。其二,雖然迭代算法可以用編程語(yǔ)言來(lái)實(shí)現(xiàn),但其中涉及的數(shù)學(xué)知識(shí)需要一定的數(shù)學(xué)基礎(chǔ),如果學(xué)生數(shù)學(xué)水平較低,理解起來(lái)也會(huì)比較困難。其三,理解迭代算法還需要反復(fù)練習(xí)和實(shí)踐,然而,高中信息技術(shù)課時(shí)有限,學(xué)生多半缺乏相關(guān)編程實(shí)踐經(jīng)驗(yàn)。上述種種因素的存在,使得高中生覺(jué)得迭代算法難學(xué)難懂。為了促進(jìn)學(xué)生的學(xué)習(xí),筆者搜集了許多關(guān)于迭代算法的資料,總結(jié)了一些教學(xué)策略,設(shè)計(jì)了一套針對(duì)高中生特點(diǎn)的教學(xué)策略,幫助他們更好地理解和掌握迭代算法。
可視化抽象概念的教學(xué)策略
迭代的概念和原理比較抽象,學(xué)生理解起來(lái)有難度,此時(shí)教師可以借助數(shù)字化工具,將概念和原理進(jìn)行可視化,引導(dǎo)學(xué)生從感性上理解迭代原理。牛頓迭代法求平方根,是非常經(jīng)典的迭代實(shí)例,高中數(shù)學(xué)教材中也很詳細(xì)地介紹了牛頓迭代法求方程解的知識(shí),教師可以直接引用此實(shí)例給學(xué)生講解迭代的概念。為了讓學(xué)生直觀地看到迭代過(guò)程,可借助網(wǎng)絡(luò)畫(huà)板,將其求解過(guò)程制作成一個(gè)動(dòng)畫(huà)進(jìn)行演示,內(nèi)容如下:
利用牛頓迭代法求a的平方根,就是利用函數(shù)f(x)=x^2-a,求當(dāng)f(x)=0時(shí)x的正數(shù)解。下頁(yè)圖1是網(wǎng)絡(luò)畫(huà)板求解過(guò)程中的演示截圖。
首先,任意確定初始值x1(>0),然后將其代入函數(shù)f(x)=x^2-a中計(jì)算出函數(shù)值f(x1)。接下來(lái),在點(diǎn)(x1,f(x1))處求出切線,并將切線與x軸相交得到新的迭代點(diǎn)x2。重復(fù)以上步驟,即可逐步逼近得到a的平方根。
通過(guò)上述演示分析,學(xué)生直觀地學(xué)習(xí)了迭代原理和過(guò)程。同時(shí),引導(dǎo)學(xué)生總結(jié)迭代算法的特點(diǎn):①需要重復(fù)執(zhí)行一定的步驟,以逐漸逼近所求結(jié)果。②迭代過(guò)程中后續(xù)計(jì)算結(jié)果會(huì)依賴(lài)于之前的值。
合理地使用數(shù)字化工具,將迭代過(guò)程可視化,可以幫助學(xué)生更直觀地理解迭代算法的過(guò)程和原理,激發(fā)學(xué)生的學(xué)習(xí)興趣,為后面編寫(xiě)迭代程序奠定基礎(chǔ)。
分析結(jié)構(gòu)提煉模型的教學(xué)策略
分析程序結(jié)構(gòu)和提煉算法模型是編程教學(xué)中常用的教學(xué)策略。程序結(jié)構(gòu)是指程序代碼的組織形式和層次關(guān)系。算法模型是指將算法問(wèn)題抽象為一個(gè)簡(jiǎn)單而通用的數(shù)學(xué)模型,從而更好地理解和應(yīng)用該算法進(jìn)行問(wèn)題求解。
1.迭代算法程序結(jié)構(gòu)
迭代算法程序通常包括以下三個(gè)部分:初始化—確定迭代計(jì)算的初值,如定義一個(gè)變量,并賦予其初值。迭代計(jì)算—重復(fù)執(zhí)行的迭代計(jì)算式。終止條件—判斷當(dāng)前的計(jì)算結(jié)果是否滿(mǎn)足所需要求,如果滿(mǎn)足,則停止迭代計(jì)算并輸出結(jié)果,否則繼續(xù)迭代計(jì)算。
對(duì)應(yīng)到具體程序中,以求解平方根為例,具體如圖2所示。
2.迭代計(jì)算數(shù)學(xué)模型
在該算法結(jié)構(gòu)中迭代計(jì)算部分是難點(diǎn),筆者采用對(duì)迭代問(wèn)題進(jìn)行分類(lèi)探討的方式幫助學(xué)生突破該難點(diǎn)。對(duì)于高中生而言,需要運(yùn)用迭代法解決的問(wèn)題主要有以下三種類(lèi)型。
(1)累加器更新迭代
對(duì)于數(shù)列求和、求乘積等問(wèn)題,使用累加器或累乘器來(lái)記錄中間結(jié)果,實(shí)現(xiàn)相應(yīng)的計(jì)算。這類(lèi)問(wèn)題對(duì)應(yīng)的迭代公式可總結(jié)如下:
s=s+an(求和)
s=s*an(求乘積)
此類(lèi)問(wèn)題的解決,首先引導(dǎo)學(xué)生分析數(shù)列中每一項(xiàng)的特點(diǎn),找出通項(xiàng)公式an,接著根據(jù)以上的迭代公式得到迭代計(jì)算部分的代碼。
(2)遞推公式迭代
對(duì)于求數(shù)列中的某一項(xiàng)的問(wèn)題,常常利用遞推公式迭代法實(shí)現(xiàn),迭代公式總結(jié)如下:
an=a*a(n-1)+b
這類(lèi)問(wèn)題的解決,需要分析數(shù)列中的每一項(xiàng)和前面項(xiàng)之間的關(guān)系,找出其中的遞推算式,進(jìn)而得到具體的迭代算式。高中生已經(jīng)具備了一定的數(shù)學(xué)基礎(chǔ),只需做適當(dāng)引導(dǎo),便可找出數(shù)列的遞推式。
(3)二分逼近迭代
對(duì)于求解函數(shù)零點(diǎn)、方程根、最大值等問(wèn)題,常常采用二分逼近法,通過(guò)反復(fù)二分區(qū)間來(lái)逐步逼近精度較高的結(jié)果。對(duì)于高中學(xué)生而言,這類(lèi)問(wèn)題的迭代公式,一般會(huì)在題目中直接給出,迭代計(jì)算部分直接使用,學(xué)生只需設(shè)定合理的迭代初值,并設(shè)計(jì)恰當(dāng)?shù)牡刂茥l件即可。
學(xué)生掌握了迭代算法基本模型之后,在編程實(shí)踐中可以直接套用,提高了編程效率。分析程序結(jié)構(gòu)和提煉算法模型教學(xué)策略不僅能夠幫助學(xué)生建立深入的知識(shí)結(jié)構(gòu),還能夠促進(jìn)學(xué)生更好地掌握編程思想,提高編程技巧。
循序漸進(jìn)的教學(xué)策略
為了讓學(xué)生充分理解迭代算法的基本原理和實(shí)際應(yīng)用,可以循序漸進(jìn)地引導(dǎo)學(xué)生逐步完成學(xué)習(xí)任務(wù)。
1.從讀到寫(xiě)逆向?qū)W習(xí)促進(jìn)理解
對(duì)于初學(xué)編程的高中生而言,直接編寫(xiě)迭代程序有一定難度,可以讓學(xué)生先從閱讀程序開(kāi)始,體驗(yàn)迭代執(zhí)行過(guò)程,發(fā)現(xiàn)迭代變量的變化規(guī)律,理解迭代的運(yùn)行邏輯,再要求他們編寫(xiě)程序。通過(guò)這種逆向?qū)W習(xí)的方式,可以幫助他們更快速地掌握迭代算法的基本知識(shí),降低入門(mén)難度。
(1)閱讀程序理解迭代過(guò)程
圖3所示程序使用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)了對(duì)1到10的整數(shù)求和并輸出結(jié)果。其中,sum=sum+i為迭代計(jì)算式,通過(guò)重復(fù)執(zhí)行該迭代算式,最終實(shí)現(xiàn)了10個(gè)自然數(shù)之和的功能。學(xué)生在閱讀該程序過(guò)程中,初步建立了迭代思維,為后面的學(xué)習(xí)打下基礎(chǔ)。
(2)編程實(shí)踐從修改程序入手
接下來(lái)的編程實(shí)踐,可從修改程序開(kāi)始,讓學(xué)生參照?qǐng)D3所示的程序改寫(xiě)程序,實(shí)現(xiàn)下列功能:求和s=1+2+…+n;求階乘s=1*2*…*n;求自然數(shù)倒數(shù)之和s=1+1/2+…+
1/n等。
學(xué)生通過(guò)改寫(xiě)發(fā)現(xiàn)這些問(wèn)題之間的相似性,這種相似性表現(xiàn)在它們具有相同的程序結(jié)構(gòu),但是使用不同的迭代關(guān)系式。通過(guò)改變迭代關(guān)系式中的新增項(xiàng)公式,就可以從一個(gè)程序轉(zhuǎn)變?yōu)榱硪粋€(gè)程序來(lái)解決不同的問(wèn)題。
由讀到寫(xiě),從簡(jiǎn)單問(wèn)題入手的循序漸進(jìn)的模式,能夠幫助學(xué)生逐步建立求解迭代問(wèn)題知識(shí)體系,同時(shí)也增強(qiáng)了他們的學(xué)習(xí)興趣和信心。
2.探討經(jīng)典問(wèn)題助力思維提升
當(dāng)具備了一定的迭代知識(shí)后,可將迭代算法融入到具體問(wèn)題求解中,拋出一些有趣的經(jīng)典問(wèn)題,使學(xué)生能將所學(xué)的計(jì)算思維和編程技能應(yīng)用到現(xiàn)實(shí)問(wèn)題中。
案例一:通過(guò)觀看視頻《神奇的π》,激發(fā)學(xué)生對(duì)π的值產(chǎn)生興趣,并且了解到π可以通過(guò)多種方法求解。
π=4(……);(萊布尼茨級(jí)數(shù))
……;
……
以上是兩種求π的近似值的方法,這些公式看起來(lái)很復(fù)雜,但是用迭代思想可以化復(fù)雜為簡(jiǎn)單逐步解決。
首先,分析其中一項(xiàng)的特點(diǎn),以及它與前一項(xiàng)之間的關(guān)系或變化規(guī)律,得到這一項(xiàng)的通項(xiàng)公式或遞推公式;其次,構(gòu)建循環(huán)來(lái)完成整個(gè)式子的計(jì)算;最后,根據(jù)算法模型編寫(xiě)程序。這里可以將兩個(gè)程序代碼進(jìn)行對(duì)比,讓學(xué)生發(fā)現(xiàn)它們的算法結(jié)構(gòu)都一樣,唯一的區(qū)別就是通項(xiàng)公式不一樣,代碼如下表所示。
尋找通項(xiàng)公式或遞推公式是求解以上問(wèn)題的難點(diǎn),此處教師可適當(dāng)引導(dǎo)學(xué)生進(jìn)行自主探究,讓學(xué)生通過(guò)逐項(xiàng)對(duì)比,推導(dǎo)出最終的算式。學(xué)生在探究問(wèn)題的過(guò)程中形成解決問(wèn)題的邏輯思維。
案例二:由斐波那契的兔子問(wèn)題探究斐波那契數(shù)列的前后項(xiàng)之比。
斐波那契的兔子是一個(gè)有趣的問(wèn)題,它源于意大利數(shù)學(xué)家斐波那契的名著《算法之書(shū)》中提出的一個(gè)假設(shè):“如果一對(duì)兔子從出生后第三個(gè)月起每個(gè)月都能生一對(duì)小兔子,并且新生的小兔子也會(huì)按照同樣的規(guī)律成長(zhǎng)和繁殖,那么一年內(nèi)可以繁殖多少對(duì)兔子?”
根據(jù)問(wèn)題分析兔子的繁殖規(guī)律:本月兔子對(duì)數(shù)=本月大兔子對(duì)數(shù)+本月小兔子對(duì)數(shù);本月大兔子對(duì)數(shù)=上月兔子對(duì)數(shù);本月小兔子對(duì)數(shù)=上上月兔子對(duì)數(shù)。
因此本月兔子的數(shù)量為:本月兔子對(duì)數(shù)=上月兔子對(duì)數(shù)+上上月兔子對(duì)數(shù)。
通過(guò)分析每個(gè)月兔子的數(shù)量,得到了著名的斐波那契數(shù)列:1,1,2,3,5……其前兩項(xiàng)為1,從第三項(xiàng)開(kāi)始,每一項(xiàng)都等于前兩項(xiàng)之和。
有了每一項(xiàng)和前面項(xiàng)之間的遞推公式之后,運(yùn)用迭代算法編寫(xiě)程序計(jì)算出每一項(xiàng)的值,代碼如圖4所示。
在計(jì)算出斐波那契數(shù)列的每一項(xiàng)值后,開(kāi)始探索數(shù)列相鄰兩項(xiàng)之比,并讓學(xué)生觀察其中的規(guī)律。
在探討上述問(wèn)題的過(guò)程中,學(xué)生可能會(huì)發(fā)現(xiàn),求前后兩項(xiàng)之比,需要兩次執(zhí)行上述代碼,為了避免代碼重復(fù),這里可以考慮引入函數(shù)的概念,并通過(guò)調(diào)用函數(shù)來(lái)求比值。最后經(jīng)過(guò)程序運(yùn)行測(cè)試,學(xué)生驚喜地發(fā)現(xiàn),相鄰兩項(xiàng)之比隨著項(xiàng)數(shù)的增加逐漸趨近于黃金比例(約為1.61803398875)。
通過(guò)這些有趣的數(shù)學(xué)問(wèn)題的探討,激發(fā)了學(xué)生的學(xué)習(xí)興趣,加強(qiáng)了學(xué)生的邏輯推理與思考能力,幫助他們更好地理解算法與實(shí)際問(wèn)題之間的聯(lián)系,培養(yǎng)他們遷移應(yīng)用所學(xué)知識(shí)的能力。
錯(cuò)誤中提升的教學(xué)策略
在編程學(xué)習(xí)過(guò)程中,學(xué)生會(huì)遇到各種錯(cuò)誤和問(wèn)題,教師需要及時(shí)給予指導(dǎo)和解決方案,鼓勵(lì)學(xué)生閱讀報(bào)錯(cuò)提示,分析錯(cuò)誤原因,正確調(diào)試運(yùn)行程序。引導(dǎo)學(xué)生從錯(cuò)誤中學(xué)習(xí),于錯(cuò)誤中反思。對(duì)于迭代算法,學(xué)生易出的問(wèn)題除了基本語(yǔ)法錯(cuò)誤外,還有算法錯(cuò)誤和邏輯錯(cuò)誤,大致有以下幾個(gè)方面。
一是迭代初值的選擇。迭代算法的初值是其計(jì)算的起點(diǎn),需要根據(jù)實(shí)際情況進(jìn)行選擇。良好的初值可以加快算法的收斂速度,但錯(cuò)誤的初始值可能會(huì)導(dǎo)致迭代失敗。例如,在求解階乘問(wèn)題時(shí),初始值不能設(shè)為0。在獲得迭代解之后,需要提醒學(xué)生進(jìn)行算法驗(yàn)證以確保解的正確性。
二是程序死循環(huán)。這種錯(cuò)誤屬于邏輯錯(cuò)誤,由于迭代是一種循環(huán),for語(yǔ)句的迭代次數(shù)可控,一般不容易發(fā)生這種問(wèn)題。而在使用while語(yǔ)句時(shí),必須正確設(shè)置終止條件,否則就會(huì)陷入死循環(huán)。遇到此類(lèi)問(wèn)題,需要引導(dǎo)學(xué)生檢查while語(yǔ)句后面的迭代結(jié)束條件是否正確,同時(shí)也要檢查在循環(huán)體內(nèi)的代碼是否正確,以確保循環(huán)條件能夠在一定的時(shí)間范圍內(nèi)被滿(mǎn)足。
總結(jié)迭代算法易錯(cuò)點(diǎn),可以幫助學(xué)生找到解決錯(cuò)誤的方法,鼓勵(lì)學(xué)生自我糾錯(cuò),得到正確的程序運(yùn)行結(jié)果。引導(dǎo)學(xué)生在錯(cuò)誤中提升,不僅可以激發(fā)他們的內(nèi)在動(dòng)力,提高學(xué)生編程實(shí)踐的能力和水平,還可以培養(yǎng)學(xué)生獨(dú)立思考和解決問(wèn)題的能力。
結(jié)束語(yǔ)
筆者根據(jù)高中生認(rèn)知特點(diǎn)和學(xué)習(xí)需求總結(jié)出的一系列教學(xué)策略,都是基于計(jì)算思維和迭代算法的理論和實(shí)踐,目的是幫助學(xué)生從感性到理性、從簡(jiǎn)單到復(fù)雜、從錯(cuò)誤到正確地理解和掌握迭代算法,并且能夠?qū)⑵溥\(yùn)用到解決實(shí)際問(wèn)題中。本文提及的教學(xué)策略也可以應(yīng)用到整個(gè)程序設(shè)計(jì)教學(xué)中,幫助學(xué)生更好地學(xué)習(xí)程序設(shè)計(jì)知識(shí),提高計(jì)算機(jī)編程能力,培養(yǎng)計(jì)算思維。
參考文獻(xiàn):
[1]李盼盼,張維,曾鑫耀,等.基于布魯姆教育目標(biāo)分類(lèi)的計(jì)算思維核心要素測(cè)評(píng)框架構(gòu)建[J].軟件導(dǎo)刊,2023(02):160-165.
[2]鄭興航.從解決數(shù)學(xué)問(wèn)題出發(fā)認(rèn)識(shí)計(jì)算思維[J].中國(guó)信息技術(shù)教育,2023(02):40-43.