統計c語言中英文字幕,C語言日記——遞歸

C語言日記——遞歸

首先,允許我從《c primer plus》中摘一句話:C允許函數調用它自己,這種調用稱為遞歸。

有一段時間一直搞不清楚遞歸的實質,直到看到如下代碼:

#include

int up_and_down(int n);

int main() {

up_and_down(1);

return 0;

}

int up_and_down(int n)

{

printf("Level %d:n location %p\n",n,&n); // #1

if (n < 4) up_and_down(n +

1);

printf("LEVEL %d:n location %p\n",n,&n); // #2

return 0;

}

運行結果:

Level 1:n location 012FFB3C

Level 2:n location 012FFB2C

Level 3:n location 012FFB1C

Level 4:n location 012FFB0C

LEVEL 4:n location 012FFB0C

LEVEL 3:n location 012FFB1C

LEVEL 2:n location 012FFB2C

LEVEL 1:n location 012FFB3C

請按任意鍵繼續. . .

這個結果當你認識遞歸后就不會覺得有半點奇怪了。

想要真正搞懂遞歸,這段代碼值得上機推敲,最好用調試一步步看看程序的執行順序。

這里講下我的個人理解:

首先程序執行主函數main(),在里面調用up_and_down()函數(此時參數為n=1,記住在主函數中該函數只調用了一次,雖然這句話有點多余但我還是覺得有必要提醒)

接著進入了被調函數up_and_down()(這里的被調函數是相對main()而言)

在up_and_down()中,首先打印#1(看上面代碼注釋)

然后執行up_and_down(1+1),即在up_and_down(1)中調用up_and_down(2)

在這里up_and_down(1)為up_and_down(2)的主調函數,后者則為前者的被調函數

記住這點就好理解了,我們都知道在一個函數中,調用另一個函數執行完以后要返回主調函數

即在up_and_down(1)中調用up_and_down(2)

在up_and_down(2)中調用up_and_down(3)

在up_and_down(3)中調用up_and_down(4)

直到up_and_down(4)打印完#1后不符合(n<4)停止調用,隨即跳過if語句直接打印#2

在這里會發現#2是第一次打印,因為在前面幾次調用中都還沒運行到打印#2這段代碼

重點來了,打印完#2后意味著up_and_down(4)調用完畢了,則按照上面說的調用完后返回主調函數

而up_and_down(4)的主調函數是up_and_down(3)

返回up_and_down(3)后程序繼續運行,在up_and_down(3)中打印#2(因為在之前up_and_down(3)調用了up_and_down(4),未來得及運行打印#2)

up_and_down(3)打印#2后就等于up_and_down(3)調用完畢了,這里我們又要記住up_and_down(3)是在up_and_down(2)中被調用的,調用完后返回up_and_down(3)的主調函數up_and_down(2)

同理up_and_down(2)調用完后返回至up_and_down(1),而up_and_down(1)才是真正的主函數main()的被調函數,up_and_down(1)執行完畢后返回至main()函數,main()函數再繼續執行剩下的代碼,這里是return

0;

啰嗦了那么多,其實第一遍看完可能還是捋不清,在這里需要記住,遞歸其實就是函數自己不斷調用自己,弄清楚遞歸完一層要返回哪一層,代碼的執行順序都是從上往下的,耐心點一步步看下去兩三遍后就會恍然大悟。

以上純為個人理解,如有錯誤希望指出,大家一起學習,共同進步!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gnu linux中 使用,在Linux上使用GNU sed的方法

grep 命令grep 在文件(或命令輸出)中搜索指定正則表達式&#xff0c;并且在標準輸出中輸出匹配的行。樣例顯示文件 /etc/passwd 中用戶 gacanepa 的信息&#xff0c;忽略大小寫。#grep-i gacanepa /etc/passwd顯示 /etc 文件夾下所有 rc 開頭并跟隨任意數字的內容。#ls-l /etc …

android開機自動開啟zram,低內存配置 ?|? Android 開源項目 ?|? Android Open Source Project...

Android 支持內存為 512 MB 的設備。本文檔旨在幫助 OEM 優化和配置 Android 內核 4.4&#xff0c;使其能夠在低內存設備上運行。在下文所述的優化措施中&#xff0c;有幾項非常通用&#xff0c;甚至也可應用于以前的版本。Android 內核 4.4 平臺優化改善了內存管理采用了經驗證…

android 自動 鍵盤,關于Android中的軟鍵盤

InputMethodService為我們的輸入法創建了一個Dialog&#xff0c;并且將該Dialog的Window的某些參數(如Gravity)進行了設置&#xff0c;使之能夠在底部或者全屏顯示。當我們點擊輸入框時&#xff0c;系統對活動主窗口進行調整&#xff0c;從而為輸入法騰出相應的空間&#xff0c…

Android渠道包自動發布市場,Android Gradle實現打包指定渠道后自動上傳到fir

fir分三個主要步驟1.獲取fir上傳憑證2.上傳APKAPP logo圖標3.獲取最新的下載地址供別人下載注&#xff1a;python使用的是requests網絡請求庫1.獲取fir上傳憑證image.png代碼如下&#xff1a;# 第一步&#xff1a;獲取fir上傳憑證print("get fir upload certificate"…

android studio vfs,Android Studio:嘗試呈現XML布局的InvalidVirtualFileAccessException

我正在嘗試在我的應用中預覽xml布局(任何xml布局).我正在使用Android Studio 1.5 Preview 2.我一遍又一遍地收到此錯誤:InvalidVirtualFileAccessException:訪問無效的虛擬文件:file:// D:/Scott/Android/Studio/MyApp/app/build/intermediates/classes/debug/com/scott/myapp/…

android 基類fragment,Android DialogFragment 基類的定制

鴻洋博客介紹&#xff1a;DialogFragment的基本使用好處&#xff1a;1&#xff1a;使用DialogFragment來管理對話框&#xff0c;當旋轉屏幕和按下后退鍵時可以更好的管理其聲明周期&#xff0c;它和Fragment有著基本一致的生命周期2.DialogFragment也允許開發者把Dialog作為內嵌…

升級鴻蒙系統無法選擇應用,申請鴻蒙系統有一個應用選擇怎么選擇呢

[分享交流]申請鴻蒙系統有一個應用選擇怎么選擇呢34364電梯直達huafen774590890新學乍練發表于 2020-12-18 22:19:17來自&#xff1a;HUAWEI Mate 30 Pro 5G最新回復 2020-12-19 09:31:55要怎么選擇大家知道嗎&#xff1f;想著你的狼自成一派發表于 2020-12-18 22:22:29來自&am…

html5 網頁游戲論文,JavaScript編寫的網頁小游戲,很給力

以下為游戲代碼&#xff1a;var timerID null;var INT 40;var loadFLG 0;var gameFLG 0;var missFLG 0;var tim 0;var blcol new Array(5); // block colorvar blsta new Array(40); // block statusvar blNO new Array(40); // block Novar blclr 0; // clear block…

c 插件讀取有屬性的html6,廖雪峰的JS教程6-jQuery

jQueryjQuery是JavaScript世界中使用最廣泛的一個庫。jQuery這么流行&#xff0c;肯定是因為它解決了一些很重要的問題。實際上&#xff0c;jQuery能幫我們干這些事情&#xff1a;消除瀏覽器差異&#xff1a;你不需要自己寫冗長的代碼來針對不同的瀏覽器來綁定事件&#xff0c;…

html5中的css特性,淺談HTML5 CSS3的新交互特性

本文標題的這副圖片&#xff0c;是用phosotshop制作的。但是&#xff0c;在搜索引擎中你卻無法搜索到它&#xff0c;搜索引擎還沒有強大到能夠識別圖片里面的文字。并且由于圖片的體積不算太小&#xff0c;可能網速慢的網友在瀏覽的時候不得不耐心的等待圖片的刷新。那么&#…

html表格通過郵件發送,通過html表格發電子郵件

[email protected]>Create this tableThe field "what" is for different categoriesCREATE TABLE email_notify (ID int(11) DEFAULT ‘0‘ NOT NULL,What varchar(60) DEFAULT ‘0‘ NOT NULL,Name varchar(60) DEFAULT ‘0‘ NOT NULL,Email varchar(60) DEFAU…

計算機專業知識多選題證監會,2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱...

2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱由國家公務員考試網公告解讀欄目由提供&#xff0c;更多關于2019國家公務員考試大綱,計算機類國考考試大綱,證監會國考考試大,國家公務員考試公告解讀的內容&#xff0c;請關注國家公務員考試網/廣東公務員考試網&…

計算機和網絡老是斷開,電腦插上網線還是顯示斷開連接怎么辦

在網絡故障處理中遇到過千奇百怪的問題&#xff0c;這里就說一個比較怪異的問題。一個網線插口&#xff0c;有的電腦插上網線可以正常上網&#xff0c;而有的電腦插上就顯示斷開連接。試了好多辦法&#xff0c;換了網線&#xff0c;換了插口&#xff0c;換了路由器&#xff0c;…

計量經濟學第六版計算機答案,伍德里奇計量經濟學導論計算機習題第六章第13題c_6.13...

伍德里奇計量經濟學導論計算機習題第六章第13題,答案和MATLAB代碼clear,clc;% c6.13 by% 打開文字文件和數據文件importdata(meap00_01.des);dataxlsread(meap00_01);% 檢驗所用數據是否為非空Isnanisnan(data(:,[3,5,8,9]));asum(Isnan);bfind(a0);data1data(b,:);% 變量命名m…

思品課如何使用計算機教學課件,小學思品獲獎論文巧用多媒體,優化思品課堂教學...

小學思品獲獎論文巧用多媒體&#xff0c;優化思品課堂教學摘要&#xff1a;信息技術輔助課堂教學&#xff0c;有利于促進思想品德課教學內容呈現方式、教師教學方式、學生學習方式和師生互動方式的變革。利用信息技術能提高學生學習思想品德的興趣&#xff1b;有利于培養學生的…

計算機網絡的資源共享功能包,計算機網絡的資源共享功能包括

資源共享是現代計算機網絡的最主要的作用&#xff0c;它包括軟件共享、硬件共享及數據共享。在網絡中&#xff0c;多臺計算機或同一計算機中的多個用戶&#xff0c;同時使用硬件和軟件資源。通常多用戶同時需要的資源總是超過系統實際物理資源的數量&#xff0c;但采用邏輯(或虛…

《計算機應用基礎》期末試卷.,《計算機應用基礎》期末試卷(A卷)《計算機應用基礎》期末試卷(A卷).doc...

廣東外語藝術職業學院成人高等教育2012學年第 一 學期 三年 制2012級 初等教育專業計算機應用基礎課程 期末 考試試題試卷類型&#xff1a;A 考試形式&#xff1a;閉卷本試題共 五 大題&#xff0c; 4 頁&#xff0c;滿分 100 分&#xff0c;考試時間為 120 分鐘&#xff0c;答…

計算機學院嘉年華標題,“芯動盛夏 AI創南航” 計算機學院舉辦第八屆計算機嘉年華...

當前&#xff0c;我們正迎來一個科技主導的全智能時代&#xff0c;為激發大家學習探索人工智能的興趣&#xff0c;切身感受AI科技的魅力所在&#xff0c;計算機科學與技術學院/人工智能學院于6月20日在體育館廣場舉辦了“芯動盛夏 AI創南航”第八屆計算機嘉年華活動。活動中&am…

計算機網絡與通信02339,4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx...

4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx精品自學考試資料推薦全國 2018 年 4 月高等教育自學考試計算機網絡與通信試題課程代碼 02339一、單項選擇題本大題共 15 小題&#xff0c;每小題1 分&#xff0c;共 15 分 在每小題列出的四個備選項中只有一個是符…

計算機考研百天,2015考研計算機專業復習百天周計劃

計算機百天沖刺周計劃學習目標篇百天計劃第一周(9月26日—10月6日)1.完成數據結構中線性表的復習;并配以習題鞏固練習。2.完成強化課程數據結構第一章的學習&#xff0c;重難點針對復習。3.完成數據結構中棧&#xff0c;隊列和數組的復習; 并配以習題鞏固練習。4.完成強化課程數…