文章插圖

文章插圖
遞歸調用函數專題-C語言0| 前言
本小節主要學習一種自己嵌套自己的函數調用方法——遞歸調用
1| 示例
例如,在給定整數n的情況下,計算并輸入階乘n!的程序 。
階乘函數的定義:
int factorial(int n){int product;for (int i = 1; i <= n; i++){product = product * i;}return product; }這個函數思想:使用了一個循環將1到n的數值依次相乘進行計算,并將得到的乘積作為結果返回 。用for循環解決問題
一個循環從1開始一直不斷相乘,直到乘以n為止2| 遞歸思想求解階乘
遞歸思想求解函數階乘
int factorial(int n) {if (n==1){return 1;}return factorial(n - 1) * n; }其實換一個角度在思考這個問題,n!可以看成 n*(n-1)!的乘積,而(n-1)!又可以看作是(n-1)*(n-2)!的乘積….. 以此類推到 2 * 1,代碼是不是更簡潔一點呢?其實,像這種在一個函數的定義中調用自身的情況被稱為–遞歸調用
(1)頭遞歸
例如定義的函數:
int factorial(int n){if (n == 1){return 1;}return factorial(n-1) * n;}如果傳入給函數factorial() 的n是5:factorial(5) = 5 * factorial (4)像這種返回一個包含本身函數的遞歸調用的這種遞歸設計,被稱為投遞歸 。
= 5 * 4 * factorial (3)
= 5 * 4 * 3 * factorial(2)
= 5 * 4 * 3 * 2 * factorial(1)
= 5 * 4 * 3 * 2 * 1
(2)尾遞歸
與頭遞歸相對應的就是尾遞歸,尾遞歸的思想實現如下:
int factorial(int n, int product){if (n == 0){return product;}product = product * n;return factorial(n-1, product); }同樣也拿 n=5, 來了解一下程序的實現細節: factorial (5,1)~ factorial(n, product * n) = factorial(4,1*5) = factorial(4, 5) = factorial(3, 5*4) = factorial(3, 20) = factorial(2, 20*3) = factorial(2, 60) = factorial(1, 60*2) = factorial(1, 120)] = factorial(0, 120*1) = factorial(0, 120) = 120~ product【c++階乘函數怎么寫 c語言編寫階乘函數】小伙伴沒有發現,尾遞歸的實現中,每一次函數遞歸調用都會將一個階段性的結果傳遞到下一次被調用的函數中,當最終的一般終止條件滿足時,把最終結果直接返回 。- java的隨機數函數 隨機數函數怎么寫
- linux 設置系統時間函數 linux系統設置時間命令
- rank函數怎么用排名降序 rank函數怎么用降序
- 儲存函數與儲存過程的區別 什么是存儲過程,簡述存儲過程與存儲函數的區別
- text在excel中的意思 excel中的text函數
- C語言中gets函數 c++語言gets函數用法
- php里輸出數據庫數據函數 php數據庫查詢結果處理
- r語言中function函數的用法 R語言function函數
- excel兩列合并后怎么復制到另外一個表格函數 excel中兩列合并到一起后怎么復制
- excel中如何取數字前幾位 excel取數值后幾位的函數
