?? 例2.1.txt
字號(hào):
例2.1 求1×2×3×4×5。
可以用最原始的方法進(jìn)行。
步驟1: 先求1×2,得到結(jié)果2。
步驟2: 將步驟1得到的乘積2再乘以3,得到結(jié)果6。
步驟3: 將6再乘以4,得24。
步驟4: 將24再乘以5,得120。這就是最后的結(jié)果。
這樣的算法雖然是正確的,但太繁瑣。如果要求1×2×…×1000,則要寫(xiě)999個(gè)步驟,顯然是不可取的。而且每次都直接使用上一步驟的數(shù)值結(jié)果(如2,6,24等),也不方便。應(yīng)當(dāng)找到一種通用的表示方法。
可以設(shè)兩個(gè)變量,一個(gè)變量代表被乘數(shù),一個(gè)變量代表乘數(shù)。不另設(shè)變量存放乘積結(jié)果,而直接將每一步驟的乘積放在被乘數(shù)變量中。今設(shè)p為被乘數(shù),i為乘數(shù)。用循環(huán)算法來(lái)求結(jié)果。可以將算法改寫(xiě)如下:
S1: 使p=1
S2: 使i=2
S3: 使p×i,乘積仍放在變量p中,可表示為p×i=>p
S4: 使i的值加1,即i+1=>i
S5: 如果i不大于5,返回重新執(zhí)行步驟S3以及其后的步驟S4和S5;否則,算法結(jié)束。最后得到p的值就是5!的值。
上面的S1,S2…代表步驟1,步驟2……S是step(步)的縮寫(xiě)。這是寫(xiě)算法的習(xí)慣用法。
請(qǐng)讀者仔細(xì)分析這個(gè)算法,能否得到預(yù)期的結(jié)果。顯然這個(gè)算法比前面列出的算法簡(jiǎn)練。
如果題目改為求1×3×5×7×9×11。
算法只需作很少的改動(dòng)即可:
S1: 1=>p
S2: 3=>i
S3: p×i=>p
S4: i+2=>i
S5: 若i≤11,返回S3; 否則,結(jié)束。
可以看出,用這種方法表示的算法具有通用性、靈活性。S3到S5組成一個(gè)循環(huán),在實(shí)現(xiàn)算法時(shí),要反復(fù)多次執(zhí)行S3、S4、S5等步驟,直到某一時(shí)刻,執(zhí)行S5步驟時(shí)經(jīng)過(guò)判斷,乘數(shù)i已超過(guò)規(guī)定的數(shù)值而不返回S3步驟為止。此時(shí)算法結(jié)束,變量p的值就是所求結(jié)果。
由于計(jì)算機(jī)是高速進(jìn)行運(yùn)算的自動(dòng)機(jī)器,實(shí)現(xiàn)循環(huán)是輕而易舉的,所有計(jì)算機(jī)高級(jí)語(yǔ)言中都有實(shí)現(xiàn)循環(huán)的語(yǔ)句。因此,上述算法不僅是正確的,而且是計(jì)算機(jī)能實(shí)現(xiàn)的較好的算法。
請(qǐng)讀者仔細(xì)分析循環(huán)結(jié)束的條件,即S5步驟。如果在求1×2×…×11時(shí),將S5步驟寫(xiě)成
S5: 若i<11,返回S3。
這樣會(huì)有什么問(wèn)題?會(huì)得到什么結(jié)果?
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -