999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C語言的遞歸函數(shù)教學(xué)方法探討

2008-01-01 00:00:00徐洪智張彬連
計算機(jī)教育 2008年2期

摘要:本文從實(shí)際教學(xué)出發(fā),首先討論了遞歸的基本條件,總結(jié)出遞歸程序的設(shè)計方法,然后詳細(xì)分析遞歸程序的執(zhí)行過程并給出了遞歸程序的一般結(jié)構(gòu),最后讓學(xué)生自己分析漢諾塔問題并動手寫程序,在教學(xué)中取得了較好的效果。

關(guān)鍵詞:函數(shù);遞歸;教學(xué)

中圖分類號:G642

文獻(xiàn)標(biāo)識碼:A

文章編號:1672-5913(2008)02-0057-02

1引言

C語言一般作為計算機(jī)及相關(guān)專業(yè)的第一門語言,它是后續(xù)計算機(jī)課程的基礎(chǔ),學(xué)生對它的掌握程度直接影響到后續(xù)課程的學(xué)習(xí)。函數(shù)是C語言中一個非常重要的部分,所有程序都是由函數(shù)組成的,如果沒有掌握函數(shù),就不可能掌握C語言。在函數(shù)中,遞歸函數(shù)是一類比較難以掌握的問題,學(xué)生在學(xué)習(xí)過程中往往對這類程序的執(zhí)行過程不了解,對遞歸問題的認(rèn)識不清楚,難以寫出正確的遞歸程序。針對遞歸問題的教學(xué),人們在實(shí)踐中做了很多有益的探討,也有一些教材對這一問題做了較為細(xì)致的分析。但以上工作大都以漢諾塔問題進(jìn)行講解,而漢諾塔問題本身較為復(fù)雜,很多學(xué)生一下難以掌握該程序的執(zhí)行過程。本文從實(shí)際教學(xué)出發(fā),首先分析遞歸的基本條件,從簡單程序開始分析,寫出遞歸程序,然后一步一步分析遞歸程序的執(zhí)行過程,讓學(xué)生對遞歸有更深入的理解。然后寫出遞歸程序的一般結(jié)構(gòu),最后分析漢諾塔問題,讓學(xué)生自己寫出程序。

2遞歸的基本條件

一般情況下采用遞歸方法來解決問題,必須符合以下三個條件:

a. 可以把要解決的問題轉(zhuǎn)化為一個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的問題的規(guī)模有規(guī)律地遞減。也就是說解決問題的方法相同,調(diào)用函數(shù)的參數(shù)每次不同(有規(guī)律地遞減),如果沒有規(guī)律也就不能運(yùn)用遞歸方法求解。

b. 每個子問題必須比原來問題的規(guī)模更小,即使小一號也行,如果能夠迅速減小規(guī)模更好。

c. 必定要有一個明確的結(jié)束遞歸的條件。當(dāng)問題的規(guī)模達(dá)到一定程度時(一般的時候應(yīng)該是規(guī)模足夠小),問題的解是已知的,在這個地方能結(jié)束遞歸調(diào)用,不然可能導(dǎo)致系統(tǒng)崩潰或陷入死循環(huán)。

3遞歸問題分析

遞歸程序最少有兩種方法可以寫出。第一種是想辦法把問題轉(zhuǎn)化為數(shù)學(xué)表達(dá)式,能用數(shù)學(xué)表達(dá)式寫出的,可以直接把數(shù)學(xué)表達(dá)式變?yōu)槌绦?;第二種是按照遞歸的基本條件,分析所給問題的結(jié)構(gòu),一個問題總具有一定的規(guī)模,想辦法把規(guī)模變小,使小規(guī)模的問題與原問題具有相同的解法,當(dāng)規(guī)模足夠小時,該問題的解是已知的,這時可以套用后面所講的一般遞歸程序的結(jié)構(gòu)來寫遞歸程序。

例1:求n!。經(jīng)過分析n!可以表示為

假定n!是一個long型,則直接寫出程序如下:

long func(int n) //求n!

{if(n==1 || n==0)

return 1;

return n*func(n-1);

}

例2:求Fibonacci數(shù)列(非波納契)的第n項(xiàng),該數(shù)列表示如下:

按照例1的方法,寫出程序如下:

longfib(int n)

{ if( (n==1||(n==2) )

① return 1;

else

② return fib(n-1)+fib(n-2);

}

如輸入n=4,程序(具體程序用行標(biāo)號代替)的執(zhí)行過程如圖1所示,通過分析以上程序,大部分學(xué)生對遞歸函數(shù)的執(zhí)行過程有了較為清晰的認(rèn)識。

例3:用遞歸的方法將一個正整數(shù)n按位輸出,如輸入2008,輸出2 0 0 8,n的位數(shù)不確定,可以是任意正整數(shù)。

分析:

① 函數(shù)應(yīng)該是處理整數(shù)n,并且是輸出,用PrintNum(int n)來實(shí)現(xiàn)這一功能;

② 如果n的規(guī)模很小(只有1位),可以直接輸出后結(jié)束程序;(這里應(yīng)該知道n的位數(shù)是問題的規(guī)模)

③ 把問題的規(guī)模變小,去掉n的某1位(在實(shí)際講解時是去掉個位,因?yàn)槿サ魝€位比較容易一些,我們用k=n%10保存?zhèn)€位,n=n/10就可以去掉個位),余下位形成一個新的規(guī)模比原數(shù)小的數(shù),再在新數(shù)上遞歸調(diào)用函數(shù),這個新數(shù)按要求輸出后,去掉的這一位因?yàn)槭莻€位,所以應(yīng)該把它輸出到新數(shù)的后面。

通過以上分析,寫出程序如下:

void PrintNum(int n)/*該函數(shù)能把n按要求輸出*/

{ int k;

if(n<10){ printf(\"%2d\",n); return ;} /*如果規(guī)模很小,則直接處理后結(jié)束程序*/

k=n%10; /*在n中提出個位數(shù)字*/

PrintNum(n/10);/*把規(guī)模更小的子問題遞歸調(diào)用函數(shù)來處理*/

printf(\"%2d\",k);

}

通過以上三個例子,學(xué)生對遞歸函數(shù)有了較為清晰的認(rèn)識,對遞歸程序的寫法有了一定的掌握之后,我們可以總結(jié)出一個一般遞歸程序的結(jié)構(gòu)如下,幾乎所有遞歸程序都可以按照這個結(jié)構(gòu)去分析并寫程序。

ReturnType Function(問題描述及規(guī)模)/* 在程序內(nèi)部我們應(yīng)該認(rèn)為函數(shù)Function已經(jīng)具備處理這類問題的功能,它可以直接被調(diào)用 */

{ 當(dāng)規(guī)模足夠小的時候,直接給出結(jié)果(有可能什么都不做),返回;

把原問題分解為規(guī)模更小一些的子問題,在這些子問題上遞歸調(diào)用函數(shù),并注意所有子問題都被處理到。

}

我們根據(jù)這個結(jié)構(gòu),要求學(xué)生回過來簡單看一下前面的三個例子,多數(shù)學(xué)生便會對遞歸有更為深入的認(rèn)識。之后引入漢諾塔問題,該問題的分析方法類似于例3,并套用這個結(jié)構(gòu),讓學(xué)生自己試著寫該問題的程序,可以發(fā)現(xiàn)有一部分學(xué)生能自己寫出遞歸函數(shù)來。

4總結(jié)

在C語言中,函數(shù)一直是學(xué)習(xí)的重點(diǎn)和難點(diǎn),遞歸又是最難掌握的一類函數(shù),本文從實(shí)際教學(xué)需要出發(fā),首先分析遞歸的基本條件,從由易到難的順序,設(shè)計了一些教學(xué)實(shí)例,重點(diǎn)讓學(xué)生了解遞歸函數(shù)的寫法以及執(zhí)行情況,最后總結(jié)出遞歸函數(shù)的一般程序結(jié)構(gòu),使學(xué)生能正確設(shè)計遞歸程序,在實(shí)際教學(xué)中取得了良好的效果。

A Discussion of the Teachin2g-Method of Recursion Function in C Language

Abstract: Recursion function is difficult in C language. Performance of this function and designing program are difficult for student. Setting out from the actual teaching, the article firstly discusses the basic condition for recursion function and concludes methods of designing recursion function, then analyses the performance of recursion function in detail and develops general structure of it, finally, make students analyze problem of Hanoi and design program. It produces a good effect.

Keywords: function, recursion, teaching

收稿日期:2007-10

作者簡介:

徐洪智(1974-),男,湖南長沙人。吉首大學(xué)講師,碩士,高級程序員,研究方向?yàn)樗惴ㄔO(shè)計與分析,網(wǎng)格計算。

聯(lián)系地址:湖南 張家界 吉首大學(xué) 張家界校區(qū) 信息管理與工程學(xué)院 郵編427000

TEL:13974413996

E-mail:xuhongzhi9@163.com

張彬連(1978-),女,湖南湘潭人。吉首大學(xué)講師,碩士,研究方向?yàn)橛嬎銠C(jī)網(wǎng)絡(luò)。

注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文?!?/p>

主站蜘蛛池模板: 国产剧情国内精品原创| 欧美午夜在线播放| 在线播放91| 91免费国产高清观看| 国产精品永久免费嫩草研究院| 四虎国产精品永久在线网址| 国产激爽大片在线播放| 一区二区三区精品视频在线观看| 久久久久青草大香线综合精品| 亚洲热线99精品视频| 欧美日韩亚洲国产| 久久a级片| 久无码久无码av无码| 99久视频| 亚洲侵犯无码网址在线观看| 精品伊人久久久久7777人| 尤物视频一区| 美女无遮挡拍拍拍免费视频| 成年片色大黄全免费网站久久| 亚洲欧美综合另类图片小说区| 亚洲福利视频网址| 亚洲青涩在线| 亚洲人成网站日本片| 亚洲一级毛片在线播放| 国产精品999在线| 亚欧成人无码AV在线播放| 91九色最新地址| 国产精品亚洲va在线观看| 毛片视频网| 国产乱子伦视频在线播放| 国产电话自拍伊人| 国产成人乱无码视频| 人妻21p大胆| 波多野结衣在线一区二区| 国产一二三区在线| 91视频区| 99热这里只有精品国产99| 99视频免费观看| 成人午夜视频在线| 九九免费观看全部免费视频| 亚洲天堂2014| 久久久久青草大香线综合精品| 亚洲人成影院午夜网站| 国产女人综合久久精品视| 日本国产一区在线观看| 91人妻日韩人妻无码专区精品| 国产成人午夜福利免费无码r| 中文字幕免费在线视频| 亚洲最黄视频| 国产导航在线| 日韩精品高清自在线| 91久久偷偷做嫩草影院免费看 | 91无码人妻精品一区| 亚洲国产综合自在线另类| 色135综合网| 97se亚洲综合在线韩国专区福利| 中文字幕无码制服中字| 被公侵犯人妻少妇一区二区三区| 欧美一区二区三区不卡免费| 国产成人盗摄精品| 亚国产欧美在线人成| 欧美69视频在线| 国产在线视频福利资源站| 国产成人亚洲欧美激情| 精品国产美女福到在线直播| 香蕉视频在线观看www| 欧美a级在线| 国产综合另类小说色区色噜噜| 成人福利一区二区视频在线| 成人午夜天| 黄色三级毛片网站| 最新国产你懂的在线网址| 亚洲中文无码av永久伊人| 亚洲精品无码久久久久苍井空| 国产精鲁鲁网在线视频| 国产成人a毛片在线| 久久久久无码精品| 一边摸一边做爽的视频17国产| 久久精品国产国语对白| 精品视频福利| 激情無極限的亚洲一区免费| 波多野结衣中文字幕久久|