




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C程序設(shè)計(jì)專(zhuān)題輔導(dǎo)課
遞歸函數(shù)程序設(shè)計(jì)遞歸函數(shù)函數(shù)直接或間接地調(diào)用自己的形式稱(chēng)為函數(shù)的遞歸調(diào)用。遞推法與遞歸法求階乘遞推法n!=1*2*3*....*nfor(result=1,i=1;i<=n;i++)result=result*i;遞歸法遞歸定義n!=n*(n-1)!(n>1)n!=1(n=0,1)遞歸函數(shù)fact(n)程序解析例10-3用遞歸函數(shù)求n!。#include<stdio.h>doublefact(intn);int
main(void){intn;
scanf("%d",&n);
printf("%f",fact(n));return0;}doublefact(intn) /*函數(shù)定義*/{doubleresult;
if(n==1||n==0) /*遞歸出口*/result=1;elseresult=n*fact(n-1);
returnresult;}求n!遞歸定義n!=n*(n-1)!(n>1)n!=1(n=0,1)fact(n)=n*fact(n-1);遞歸式main()fact(3)fact(2)fact(1){....{....{....{....printf(fact(3))f=3*fact(2)f=2*fact(1)f=1}return(f)return(f)return(f)}}}遞歸函數(shù)fact(n)的實(shí)現(xiàn)過(guò)程fact(3)=
2*1=23*2=6同時(shí)有4個(gè)函數(shù)在運(yùn)行,且都未完成3*fact(2)=2*fact(1)=fact(1)=1遞歸程序設(shè)計(jì)用遞歸實(shí)現(xiàn)的問(wèn)題,滿(mǎn)足兩個(gè)條件:?jiǎn)栴}可以逐步簡(jiǎn)化成自身較簡(jiǎn)單的形式(遞歸式)n!=n*(n-1)!nn-1Σi=n+Σi
i=1i=1遞歸最終能結(jié)束(遞歸出口)兩個(gè)條件缺一不可解決遞歸問(wèn)題的兩個(gè)著眼點(diǎn)遞歸函數(shù)可以用數(shù)學(xué)歸納法來(lái)理解數(shù)學(xué)歸納法:首先證明初值成立,然后假設(shè)n時(shí)成立,再證明n+1時(shí)成立,則問(wèn)題得到證明。例10-4寫(xiě)輸出結(jié)果#include<stdio.h>longfib(intg){switch(g){case1:case2:return(1);}return(fib(g-1)+fib(g-2));}voidmain(){longk;k=fib(5);
printf("k=%ld\n",k);}fib(g)=1g=1fib(g)=1g=2fib(g)=fib(g-1)+fib(g-2)g>=3k=5Fibonacci數(shù)列遞歸公式遞歸式遞歸出口例10-5漢諾(Hanoi)塔將64個(gè)盤(pán)從座A搬到座B(1)一次只能搬一個(gè)盤(pán)子(2)盤(pán)子只能插在A、B、C三個(gè)桿中(3)大盤(pán)不能壓在小盤(pán)上
A B C分析
A B C
A B Cnn-1函數(shù)
/*搬動(dòng)n個(gè)盤(pán),從a到b,c為中間過(guò)渡*/voidhanio(intn,chara,charb,charc){if(n==1)printf("%c-->%c\n",a,b);else{hanio(n-1,a,c,b);
printf("%c-->%c\n",a,b);hanio(n-1,c,b,a);}}hanio(n個(gè)盤(pán),A→B)//C為過(guò)渡{if(n==1)直接把盤(pán)子A→Belse{hanio(n-1個(gè)盤(pán),A→C)
把n號(hào)盤(pán)A→B hanio(n-1個(gè)盤(pán),C→B) }}算法八皇后問(wèn)題八皇后問(wèn)題是一個(gè)古老而著名的問(wèn)題,是回溯算法的典型例題。該問(wèn)題是著名的數(shù)學(xué)家高斯提出:在8X8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線(xiàn)上,問(wèn)有多少種擺法。11111111八皇后問(wèn)題分析:任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線(xiàn)上,可用數(shù)組a記錄各行皇后所在的列,數(shù)組b,c反映兩條斜線(xiàn)上是否安全。0123456701234567b數(shù)組C數(shù)組八皇后問(wèn)題#include<stdio.h>#defineN8/*定義列數(shù)*/int
a[N]={0};intb[2*N-1]={0};intc[2*N-1]={0};int
q[N][N]={0};intcount=0;voidqueen(intn){intj;for(j=0;j<N;j++)/*對(duì)第n行進(jìn)行第n個(gè)皇后的位置確定*/if(a[j]==0&&b[n+j]==0&&c[n-j+N-1]==0){/*可以作皇后候選位置*/
q[n][j]=1;a[j]=1;b[n+j]=1;c[n-j+N-1]=1;/*皇后占領(lǐng)的位置標(biāo)記*/
if(n==N-1)print();elsequeen(n+1);
q[n][j]=0;a[j]=0;b[n+j]=0;c[n-j+N-1]=0;}}voidmain(){queen(0);}voidprint(){int
i,j;for(i=0;i<N;i++){for(j=0;j<N;j++)
printf("%d",q[i][j]);printf("\n");}
printf("---------%d-------\n“,++count);}遞歸算法遞歸算法往往有著算法簡(jiǎn)單,容易理解,可讀性好的優(yōu)點(diǎn),但執(zhí)行效率不高。如果存在較明確的遞推算法時(shí),遞推算法執(zhí)行效率較高。典型:Fibonacci數(shù)列遞歸算法效率非常低Fibonacci數(shù)列遞歸程序效率fib(5)fib(4)fib(3)fib(2)fib(1)fib(3)fib(2)fib(2)fib(1)fib(6)fib(4)fib(3)fib(2)fib(2)fib(1)fib(g)=1g=1fib(g)=1g=2fib(g)=fib(g-1)+fib(g-2)g>=3用遞歸方法實(shí)現(xiàn)對(duì)一個(gè)整數(shù)進(jìn)行逆序輸出。voidreverse(intn){if(n/10==0)
printf("%d",n);else{printf("%d",n%10);reverse(n/10);}}voidreverse(intn){if(n/10==0)
printf("%d",n);else{reverse(n/10);printf("%d",n%10);}}該函數(shù)的功能?2008試題B#include<stdio.h>voidfun(intn,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級(jí)數(shù)學(xué)(小數(shù)四則混合運(yùn)算)計(jì)算題專(zhuān)項(xiàng)練習(xí)及答案匯編
- 完整法學(xué)概論復(fù)習(xí)卷試題及答案
- 新版本信息處理技術(shù)員考試知識(shí)與試題及答案
- 青年人的使命與責(zé)任高考作文試題及答案
- 法學(xué)概論考試核心內(nèi)容試題及答案
- 實(shí)戰(zhàn)技巧分享2025年計(jì)算機(jī)二級(jí)VB考試試題及答案
- 面對(duì)法學(xué)概論考試的心理調(diào)適試題及答案
- 應(yīng)對(duì)軟件開(kāi)發(fā)新挑戰(zhàn)的策略試題及答案
- 計(jì)算機(jī)考試知識(shí)的方方面面
- 2025屆河北省秦皇島市盧龍縣七下數(shù)學(xué)期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 汽車(chē)前保險(xiǎn)杠結(jié)構(gòu)及安全能分析學(xué)士學(xué)位參考
- 2023年山東省青島市中考數(shù)學(xué)試卷
- 數(shù)學(xué)北師大版五年級(jí)下冊(cè)相遇問(wèn)題PPT
- 國(guó)家開(kāi)放大學(xué)《財(cái)務(wù)管理#》章節(jié)測(cè)試參考答案
- 電力企業(yè)安全風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理雙重預(yù)防體系規(guī)范
- MT 191-1989煤礦井下用橡膠管安全性能檢驗(yàn)規(guī)范
- GB/T 6416-1986影響鋼熔化焊接頭質(zhì)量的技術(shù)因素
- GB/T 5650-1985擴(kuò)口式管接頭空心螺栓
- GB/T 3620.2-2007鈦及鈦合金加工產(chǎn)品化學(xué)成分允許偏差
- GB/T 29617-2013數(shù)字密度計(jì)測(cè)試液體密度、相對(duì)密度和API比重的試驗(yàn)方法
- 智能制造最新版課件
評(píng)論
0/150
提交評(píng)論