函數的遞歸調用

????????在調用一個函數的過程中又出現直接或間接地調用該函數本身,稱為函數的遞歸(recursive)調用。C和C++允許函數的遞歸調用。例如:
????????int f(int x)
? ? ? ? { int y,z;
? ? ? ? ? z=f(y);????????????????//在調用函數 f 的過程中,又要調用 f 函數
? ? ? ? ? return (2*z);
????????}
????????以上是直接調用本函數。

????????可以看出,這種遞歸調用是無終止的自身調用。顯然,程序中不應出現這種無終止的遞歸調用,而只應出現有限次數的、有終止的遞歸調用,這可以用 if 語句來控制,只有在某一條件成立時才繼續執行遞歸調用,否則就不再繼續。
????????包含遞歸調用的函數稱為遞歸函數。關于遞歸的概念,有些讀者可能感到不好理解,下面用一個日常生活中的例子來說明。
?????????有5個人坐在一起,問第5個人多少歲?他說比第4個人大兩歲。問第4個人歲數,他說比第3個人大兩歲。問第3個人,又說比第2個人大兩歲。問第2個人,說比第1個人大兩歲。最后問第1個人,他說是10歲。請問第5個人多少歲?

解題思路:

????????顯然,這是一個遞歸問題。要求第5個人的年齡,就必須先知道第4個人的年齡,而第4個人的年齡也不知道。要求第4個人的年齡必須先知道第3個人的年齡,而第3個人的年齡又取決于第2個人的年齡,第2個人的年齡取決于第1個人的年齡。而且每個人都比其前一個人大兩歲,即
????????age(5)=age(4)+2
????????age(4)=age(3)+2
????????age(3)=age(2)+2
????????age(2)=age(1)+2
????????age(1)=10
可以用函數表述如下:
????????age(n)=10? ? ? ? ? ? ? ? ? ? ? ?(n=1)
????????age(n)=age(n-1)+2????????(n>1)

????????可以看到,當n>1時,求第n個人的年齡的公式是相同的。

????????求解可分成兩個階段:第1階段是回溯,即將第n個人的年齡表示為第(n-1)個人年齡的函數,而第(n-1)個人的年齡仍然不知道,還要回溯到第(n-2)個人的年齡……直到第1個人的年齡。此時age(1)已知,不必再向前推了。然后開始第2階段,采用遞推方法,從第1個人的已知年齡推算出第2個人的年齡(12歲),從第2個人的年齡推算出第3個人的年齡(14)……一直推算出第5個人的年齡(18歲)為止。也就是說,一個遞歸的問題可以分為回溯和遞推兩個階段。要經歷許多步才能求出最后的值。顯而易見,如果要求遞歸過程不是無限制進行下去,必須具有一個結束遞歸過程的條件。例如 age(1)= 10,就是使遞歸結束的條件。

編寫程序:

運行結果:

程序分析:

????????用一個age函數來實現遞歸過程。main函數中除了return語句外,只有一個cout語句。整個問題的求解全靠一個函數調用"age(5)"來解決。age函數共被調用5次,即age(5),age(4),age(3),age(2),age(1)。其中,age(5)是main函數調用的,其余4次是在age函數中調用的,即遞歸調用4次。請讀者仔細分析調用的過程。應當強調說明的是:在某一次調用age函數時并不是立即得到age(n)的值,而是一次又一次地進行遞歸調用,到age(1)時才有確定的值,然后再遞推出age(2),age(3),age(4),age(5)。

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

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

相關文章

云服務器修改端口通常涉及幾個步驟

云服務器修改端口通常涉及幾個步驟 遠程連接并登錄到Linux云服務器: 使用SSH工具(如PuTTY、SecureCRT等)遠程連接到云服務器。 輸入云服務器的IP地址、用戶名和密碼(或密鑰)進行登錄。 修改SSH配置文件&#xff1a…

Jmeter使用While控制器

1.前言 對于性能測試場景中,需要用”執行某個事物,直到一個條件停止“的概念時,While控制器控制器無疑是首選,但是在編寫腳本時,經常會出現推出循環異常,獲取參數異常等問題,下面總結兩種常用的…

如何將Excel表格中的圖片鏈接直接顯示成圖片?

在 Excel 中,你可以通過以下步驟將圖片鏈接轉換為直接顯示圖片: 1. **插入圖片鏈接**:首先,在 Excel 表格中插入圖片的鏈接。你可以在某個單元格中輸入圖片的鏈接地址,或者使用 Excel 的“插入圖片”功能插入鏈接。 2.…

從新手到高手,教你如何改造你的廣告思維方式!

想要廣告震撼人心又讓人長時間記住?答案肯定是“創意”二字。廣告創意,說白了就是腦洞大開,想法新穎。那些很流行的廣告,都是因為背后的想法特別、新穎。做廣告啊,就得不停地思考,創新思維是關鍵。 廣告思…

天銳綠盾 | 如何防止電腦內文件遭到泄露?

天銳綠盾是一款專為企業設計的數據防泄漏軟件系統,它通過一系列綜合性的安全措施來有效防止電腦內文件遭到泄露。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天銳綠盾防止文件泄露的主要功能和方法&a…

qt 麒麟系統 connot find /usr/local/lib

目錄 解決方法: 后來又報錯: cannot find -lopencv_world3.4.6 connot find /usr/local/lib 解決方法: LIBS -L/usr/local/lib -lopencv_world3.4.6QMAKE_LFLAGS -Wl,-rpath,/usr/local/lib 后來又報錯: cannot find -lopencv…

【CSP CCF記錄】202009-1 稱檢測點查詢

題目 過程 難點&#xff1a;編號和位置的一一對應&#xff0c;不同位置的距離可能相等。 所以使用一個結構體記錄不同檢測點的編號和到居民地的距離。 sort函數進行排序。Sort函數使用方法 參考&#xff1a;http://t.csdnimg.cn/Y0Hpi 代碼 #include <bits/stdc.h>…

Vue3.0-Ref

一、值類型與引用類型 1.1 定義和說明 在JavaScript中&#xff0c;數據類型可以分為兩類&#xff1a;值類型&#xff08;或基本數據類型&#xff09;和引用類型。 值類型&#xff08;基本數據類型&#xff09;&#xff1a; undefined null boolean number string symbo…

正則表達式和lambda表達式

正則表達式&#xff08;Regular Expressions&#xff09;和Lambda表達式雖然都包含“表達式”一詞&#xff0c;但它們在編程中的作用和用法是完全不同的。讓我們詳細比較一下它們的定義、用途和應用場景&#xff1a; 正則表達式 定義&#xff1a;正則表達式是一種用于匹配文本…

人工智能AI聊天chatgpt系統openai對話創作文言一心源碼APP小程序功能介紹

你提到的是一個集成了多種智能AI創作能力的系統&#xff0c;它結合了OpenAI的ChatGPT、百度的文言一心&#xff08;ERNIE Bot&#xff09;以及可能的微信WeLM&#xff08;或其他類似接口&#xff09;等。這樣的系統確實能夠極大地提高創作效率&#xff0c;并且在各種場景下為用…

Rust Web開發框架actix-web入門案例

概述 在看書的時候&#xff0c;用到了actix-web這個框架的案例。 書里面的版本是1.0&#xff0c;但是我看官網最新都4.4了。 為了抹平這種信息差&#xff0c;所以我決定把官方提供的示例代碼過一遍。 核心代碼 Cargo.toml [package] name "hello" version &q…

VueRouter使用總結

VueRouter 是 Vue.js 的官方路由管理器&#xff0c;用于構建單頁面應用&#xff08;SPA&#xff09;。在使用 VueRouter 時&#xff0c;開發者可以定義路由映射規則&#xff0c;并在 Vue 組件中通過編程式導航或聲明式導航的方式控制頁面的跳轉和展示。以下是 VueRouter 使用的…

隨筆:貝特彈琴

半年前&#xff0c;我買了一架朗朗代言的智能電子琴。所謂智能是指&#xff0c;它配套的手機軟件知道你在按哪個鍵&#xff0c;它還能讓任意按鍵發光。用專業術語說&#xff0c;它的鍵盤具有輸入和輸出功能&#xff0c;和軟件組合起來是一個完整的計算機系統。 隨著軟件練習曲…

使用Postman來調用Salesforce Bulk API 2.0的方法

簡介 Bulk API 2.0 可以支持大量數據增刪改查&#xff0c; 用新版的Dataloader也可以進行訪問&#xff0c;但Dataloader會把CSV里的數據先轉成Bean對象&#xff0c;這樣會耗費大量的時間&#xff0c;而且數據量過大會卡死&#xff0c;所以直接上傳CSV會節省大量時間和避免卡死風…

關于電源1

電源的定義 廣義定義&#xff1a;電源是將其它形式的能轉換成電能的裝置。 例如&#xff1a;發電機&#xff1a;將熱能、水能、風能、核能、光照、震動等轉化為電能的裝置。 電池&#xff1a;將化學能轉換為電能。 狹義定義&#xf…

每天認識新職業——程序員

一、程序員是什么 程序員是從事程序開發、程序維護的基層工作人員。一般將程序員分為程序設計人員和程序編碼人員&#xff0c;但兩者的界限并不非常清楚。隨著互聯網的不斷普及&#xff0c;網絡上把男程序員稱作“程序猿"&#xff0c;女程序員稱作“程序媛"。或統稱…

Java進階11 IO流、功能流

Java進階11 IO流-功能流 一、字符緩沖流 字符緩沖流在源代碼中內置了字符數組&#xff0c;可以提高讀寫效率 1、構造方法 方法說明BufferedReader(new FileReader(文件路徑))對傳入的字符輸入流進行包裝BufferedWriter(new FileWriter(文件路徑))對傳入的字符輸出流進行包裝…

電子商務電商數據采集接口||電子商務市場數據采集方法,你學到了嗎?

小劉從某職業院校電子商務專業畢業后&#xff0c;-直在某品牌電商部負責運營工作&#xff0c;近期&#xff0c;同班同學小王邀請小劉加入創業大軍&#xff0c;共同開設網店&#xff0c;銷售家鄉的螃蟹、鮮蝦、扇貝等生鮮水產。 運營經驗豐富的小劉決定&#xff0c;在創業開始前…

java處理視頻

文章目錄 JCodecXuggle(已被棄用)FFmpegjavacvjave經過調研,目前市面上主流的有以下幾種: JCodec 優勢: 簡單。不提供視頻編輯或錄制功能。缺點: 只能通過File的方式獲取視頻信息,無法通過url方式獲取無法轉為M3U8格式使用: <dependency><groupId>org.jc…