這是一個(gè)遞歸的處理

饒陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),饒陽網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為饒陽1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個(gè)售后服務(wù)好的饒陽做網(wǎng)站的公司定做!
遞歸是使用棧實(shí)現(xiàn)的,下面仔細(xì)的分析一下壓棧、退棧的情況
x=try(5);
調(diào)用try函數(shù),進(jìn)入try函數(shù)開始遞歸處理。
try(5)
當(dāng)前n=5,if ( n0 )成立,進(jìn)入if分支:
return ( n * try (n-2) );
也就是return ( 5 * try(3) );
當(dāng)前棧中的情況:
5 --------棧底
try(3)
當(dāng)前n=3,if ( n0 )成立,進(jìn)入if分支:
return ( n * try (n-2) );
也就是return ( 3 * try(1) );
當(dāng)前棧中的情況:
3
5 --------棧底
try(1)
當(dāng)前n=1,if ( n0 )成立,進(jìn)入if分支:
return ( n * try (n-2) );
也就是return ( 1 * try(-1) );
當(dāng)前棧中的情況:
1
3
5 --------棧底
try(-1)
當(dāng)前n=-1,if ( n0 )不成立,進(jìn)入else分支:
else return(1);
返回1.
當(dāng)前棧中的情況:
1 --------棧頂
1
3
5 --------棧底
所以整個(gè)遞歸處理后,棧的情況如下:
1 --------棧頂
1
3
5 --------棧底
在try(-1)時(shí),到達(dá)遞歸的出口,開始從棧頂退棧,
所以退找后的表達(dá)式為:
1*1*3*5=15
所以最后x等于15,輸出15
c#中通常使用try-catch語句來捕獲和處理異常。下面我們看看try-catch語句的使用語法。
try
{
可執(zhí)行語句塊;
}
catch
(
exception
e
)
{
異常處理語句;
throw;
}
1、try語句塊中放置可能存在異常的代碼塊。若執(zhí)行try語句塊時(shí)有異常發(fā)生,則程序拋出的異常,由catch語句捕獲;若try語句塊沒產(chǎn)生異常,程序會直接跳出try-catch語句。
2、catch語句塊緊跟在try語句塊后面,它可以捕獲try語句塊中拋出的異常。注意catch關(guān)鍵字后有一對小括號,小括號中需放置異常類參數(shù),參數(shù)名是可省略的。當(dāng)try語句拋出異常時(shí),拋出的異常類型會與catch語句中的異常類型進(jìn)行匹配,若匹配成功,則執(zhí)行catch語句塊中的內(nèi)容。
3、exception是所有異常類的父類,它能和所有異常類匹配。前一小節(jié)拋出的indexoutofrangeexception異常類也是exception的子類。需注意的是:如果catch語句塊不帶參數(shù),那么catch語句也能捕獲所有異常。
4、throw關(guān)鍵字表示拋出一個(gè)異常,可省略。
同時(shí)try-catch語句通常和finally語句一起使用,具體的使用方法可以參考秒秒學(xué)網(wǎng)站講解異常的那一章,其實(shí)上面的內(nèi)容我也是從那里學(xué)來的。
try
{
//必須執(zhí)行的語句
}
catch()
{
//try里面出現(xiàn)異常則執(zhí)行這里
}
這句話一般用做程序拋出異常.防止程序出現(xiàn)卡死的情況.我們一般用此語句主要用在對數(shù)據(jù)庫的增刪改的敵方.畢竟這是最容易出錯(cuò)的敵方.為了使程序提高性能,不崩潰的情況下.就是要使用這句語句.
C語言是沒有try語句的,還有,你這個(gè)地方也就算是一個(gè)函數(shù)(在C語言里面你寫的這個(gè)try只能是函數(shù))
有語法錯(cuò)誤,幫你改了,你自己再看看
#includestdio.h
void try(int,int,int);
int main()
{
int x=2,y=3,z=0; //y=3
printf("(1)x=%d y=%d z=%d\n",x,y,z);
try(x,y,z);
printf("(4)x=%d y=%d z=%d\n",x,y,z);
}
void try(int x,int y,int z)
{
printf("(2)x=%d y=%d z=%d\n",x,y,z);
z=x+y;
x=x*x;
y=y*y;
printf("(3)x=%d y=%d z=%d\n",x,y,z);
}
一點(diǎn)補(bǔ)充:最開始我運(yùn)行你這個(gè)程序是在一個(gè).cpp文件里面寫的代碼,然后運(yùn)行,但是程序會報(bào)錯(cuò),為什么呢?因?yàn)閏pp一般而言是C++的文件,C++里面有try語句,try是他的一個(gè)關(guān)鍵字,所以函數(shù)名不能是關(guān)鍵字,程序報(bào)錯(cuò)了。
但是在一個(gè).c文件里面是沒有問題的~~
還有,你這個(gè)真心是一個(gè)函數(shù),不是try語句,try語句是
try
{
do something
}
catch(some error)
{
do something
}
try里面的是一個(gè)程序塊,你把可能發(fā)生異常的程序塊放到try中執(zhí)行,
如果真發(fā)生異常的話,try就把這個(gè)異常拋出,
這個(gè)拋出過程由throw進(jìn)行,拋出異常后,
由緊跟在try塊后的
catch
接收并解決這個(gè)異常
try 語句可為一組語句指定異常處理器和/或清理代碼:
1.子句指定一個(gè)或多個(gè)異常處理程序。?當(dāng) try 子句中沒有發(fā)生異常時(shí),沒有任何異常處理程序會被執(zhí)行。 當(dāng) try 子句中發(fā)生異常時(shí),將啟動(dòng)對異常處理程序的搜索。 此搜索會逐一檢查 except 子句直至找到與該異常相匹配的子句。 如果存在無表達(dá)式的 except 子句,它必須是最后一個(gè);它將匹配任何異常。 對于帶有表達(dá)式的 except 子句,該表達(dá)式會被求值,如果結(jié)果對象與發(fā)生的異常“兼容”則該子句將匹配該異常。 如果一個(gè)對象是異常對象所屬的類或基類,或者是包含兼容該異常的項(xiàng)的元組則兩者就是兼容的。
2.如果沒有 except 子句與異常相匹配,則會在周邊代碼和發(fā)起調(diào)用棧上繼續(xù)搜索異常處理器。 1
3.如果在對 except 子句頭中的表達(dá)式求值時(shí)引發(fā)了異常,則原來對處理器的搜索會被取消,并在周邊代碼和調(diào)用棧上啟動(dòng)對新異常的搜索(它會被視作是整個(gè) try 語句所引發(fā)的異常)。
當(dāng)找到一個(gè)匹配的 except 子句時(shí),該異常將被賦值給該 except 子句在 as 關(guān)鍵字之后指定的目標(biāo),如果存在此關(guān)鍵字的話,并且該 except 子句體將被執(zhí)行。 所有 except 子句都必須有可執(zhí)行的子句體。 當(dāng)?shù)竭_(dá)子句體的末尾時(shí),通常會轉(zhuǎn)向整個(gè) try 語句之后繼續(xù)執(zhí)行。 (這意味著如果對于同一異常存在有嵌套的兩個(gè)處理器,而異常發(fā)生于內(nèi)層處理器的 try 子句中,則外層處理器將不會處理該異常。)
4.當(dāng)使用 as 將目標(biāo)賦值為一個(gè)異常時(shí),它將在 except 子句結(jié)束時(shí)被清除。 這就相當(dāng)于
這意味著異常必須賦值給一個(gè)不同的名稱才能在 except 子句之后引用它。 異常會被清除是因?yàn)樵诟郊恿嘶厮菪畔⒌那闆r下,它們會形成堆棧幀的循環(huán)引用,使得所有局部變量保持存活直到發(fā)生下一次垃圾回收。
5.函數(shù)的返回值是由最后被執(zhí)行的 return 語句所決定的。?由于 finally 子句總是被執(zhí)行,因此在 finally 子句中被執(zhí)行的 return 語句總是最后被執(zhí)行的:
6.當(dāng)找到一個(gè)匹配的 except 子句時(shí),該異常將被賦值給該 except 子句在 as 關(guān)鍵字之后指定的目標(biāo),如果存在此關(guān)鍵字的話,并且該 except 子句體將被執(zhí)行。 所有 except 子句都必須有可執(zhí)行的子句體。 當(dāng)?shù)竭_(dá)子句體的末尾時(shí),通常會轉(zhuǎn)向整個(gè) try 語句之后繼續(xù)執(zhí)行。 (這意味著如果對于同一異常存在有嵌套的兩個(gè)處理器,而異常發(fā)生于內(nèi)層處理器的 try 子句中,則外層處理器將不會處理該異常。)
分享標(biāo)題:c語言里try函數(shù)怎么用 try語句用法
當(dāng)前地址:http://chinadenli.net/article42/hipsec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、網(wǎng)站收錄、、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)