什么是高斯算法?“數(shù)學(xué)王子”高斯小時候非常淘氣,一次數(shù)學(xué)課上,老師為了讓小朋友們安靜下來,在黑板上列了一道很難的算式,讓大家在半小時內(nèi)算出。1+2+3++99+100的得數(shù),5分鐘不到高斯就舉起了小手,起初老師并不在意這一舉動,心想這個孩子又在搗亂了,但當(dāng)他發(fā)現(xiàn)全班唯一正確的答案屬于高斯且計算方法是(1+100)+(2+99)+(3+98)…+(50+51)=101×50=5050時,才大吃一驚!因為這種簡便算法是老師從未教過的“等差數(shù)列求和”方法,后來人們把這種簡便算法稱作高斯算法。
那么我們用Scratcha編程的方法來設(shè)計一個“從1累加到100求和”的高斯算法程序腳本。
01
編程思路
算法是指用系統(tǒng)的方法描述解決問題的策略機制。涉及到數(shù)學(xué)問題時用到數(shù)學(xué)相關(guān)的算法。對于這個問題,如果你能像小高斯那樣發(fā)現(xiàn)其中的規(guī)律,那么就可以使用“50×101=5050”這種簡便算法快速報出答案了。不過,很多小朋友采用的計算方法很可能是從1累加到100,從而得到結(jié)果,這種硬算的方法對人來說比較復(fù)雜但卻是計算機所擅長的,具體計算過程如下:
第1步:0+1=1;
第2步:1+2=3;
第3步:3+3=6等到第100步:4950+100=5050。
從上述計算過程可以看到,雖然每一步計算的數(shù)字都在變化,但它的計算方式卻是有規(guī)律的,這就很適合使用循環(huán)結(jié)構(gòu)來描述。如果用Sn表示從1累加到100的自然數(shù)的和,用i表示1到100變化的加數(shù),那么上述計算過程的規(guī)律就是:每一步都是用上一步累加的和S加上每一步變化的加數(shù)i。這個計算規(guī)律可用公式:Sn=Sn+i來表示,注意這里的“=”是賦值的意思。
02
編程過程
1.建立循環(huán)變量i和求和變量Sn分別表示從1到100變化的加數(shù)與從1累加到100的自然數(shù)的和。
2.將變量i和求和變量Sn的初始值分別設(shè)為1和0.
3.將求和變量Sn設(shè)定為上一次累加的和Sn+本次變化的加數(shù)i,每重復(fù)執(zhí)行一次,就將循環(huán)變量i增加1,共重復(fù)執(zhí)行100次。
4.添加“說和停止這個腳本”指令積木,并把以上各段腳本按順序拼接起來,得到“1到100累加求和”程序的完整腳本。
編程思路1參考代碼如圖1:
03
編程思路
厲害的同學(xué)們或許已經(jīng)發(fā)現(xiàn)了小高斯無意中使用了的等差數(shù)列求和公式:sn=(a1,+an)n/2,所以他很快求出了問題的答案。
1.建立首項變量;末項變量;項數(shù)變量分別賦值為對應(yīng)的回答。
2.將求和設(shè)為首項加末項的和乘以項數(shù)的積除以2,得到1累加到100的求和過程。
3.停止這個腳本
編程思路2參考代碼如圖2:
通過上面的編程內(nèi)容得知“1+2+3+…+100”。這個程序有兩種設(shè)計方法:一種是通過循環(huán),讓計算機先計算1+2,然后計算+3,接著+4、+5 … 就這樣一直到 +100,這樣做99次加法就能得到結(jié)果了,這是一種思路。
但是還有另外一種思路,這是利用高斯算法,因為1+100 = 2+99 = 3+98,這些結(jié)果都等于101,總共有50對101,那么計算機只需要計算50x101就能得到最后的結(jié)果(圖3)。
04
小節(jié)
我們比較一下兩者的過程,第一種方法要計算99次,而第二種方法只需要計算1次,你覺得哪個方法更快更好呢?
顯然,正常人都選擇后者。因此,文章的目的,不是讓你計算出結(jié)果,而是要你用最優(yōu)的方法得到結(jié)果,這才是編程的精髓。所以說,學(xué)編程的核心是算法,是同學(xué)們的編程思維。數(shù)學(xué)是一門重思考與理解、重嚴(yán)格的訓(xùn)練、充滿創(chuàng)造性的科學(xué),只有掌握了數(shù)學(xué)的思想方法和精神實質(zhì),才能由不多的幾個公式演繹出千變?nèi)f化的生動結(jié)論,顯示出無窮無盡的威力。”編程也是一樣要用到各種各樣的數(shù)學(xué)知識,在這個過程中,同學(xué)們也能接受到很多超前的數(shù)學(xué)知識,從而慢慢形成一個同齡人不具備的高維解題視角,對數(shù)學(xué)概念的理解也更加深刻。
編程是編程,數(shù)學(xué)是數(shù)學(xué),二者即相互獨立,又有密切相關(guān)。二者都需要有一定的邏輯能力,也都能培養(yǎng)邏輯思維能力。學(xué)習(xí)編程,能夠很好地提升邏輯思維能力,也就可以在一定程度上反哺數(shù)學(xué)的學(xué)習(xí);數(shù)學(xué)好那么在邏輯思維能力比較強,也容易理解編程。
通過上面的編程內(nèi)容加速同學(xué)們了解決數(shù)學(xué)問題;數(shù)學(xué)的邏輯思維可以幫助更好地學(xué)習(xí)和理解編程。