日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

c語言圓的面積編程 c語言階乘函數(shù)怎么寫

遞歸調(diào)用函數(shù)專題-C語言0| 前言本小節(jié)主要學(xué)習(xí)一種自己嵌套自己的函數(shù)調(diào)用方法——遞歸調(diào)用
1| 示例例如,在給定整數(shù)n的情況下,計(jì)算并輸入階乘n!的程序 。
階乘函數(shù)的定義:
int factorial(int n){int product;for (int i = 1; i <= n; i++){product = product * i;}return product; }這個(gè)函數(shù)思想:使用了一個(gè)循環(huán)將1到n的數(shù)值依次相乘進(jìn)行計(jì)算,并將得到的乘積作為結(jié)果返回 。
用for循環(huán)解決問題

  • 一個(gè)循環(huán)從1開始
  • 一直不斷相乘,直到乘以n為止
2| 遞歸思想求解階乘遞歸思想求解函數(shù)階乘
int factorial(int n) {if (n==1){return 1;}return factorial(n - 1) * n; }其實(shí)換一個(gè)角度在思考這個(gè)問題,n!可以看成 n*(n-1)!的乘積,而(n-1)!又可以看作是(n-1)*(n-2)!的乘積….. 以此類推到 2 * 1,代碼是不是更簡潔一點(diǎn)呢?
其實(shí),像這種在一個(gè)函數(shù)的定義中調(diào)用自身的情況被稱為–遞歸調(diào)用
(1)頭遞歸【c語言圓的面積編程 c語言階乘函數(shù)怎么寫】例如定義的函數(shù):
int factorial(int n){if (n == 1){return 1;}return factorial(n-1) * n;}如果傳入給函數(shù)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
像這種返回一個(gè)包含本身函數(shù)的遞歸調(diào)用的這種遞歸設(shè)計(jì),被稱為投遞歸 。
(2)尾遞歸與頭遞歸相對應(yīng)的就是尾遞歸,尾遞歸的思想實(shí)現(xiàn)如下:
int factorial(int n, int product){if (n == 0){return product;}product = product * n;return factorial(n-1, product); }同樣也拿 n=5, 來了解一下程序的實(shí)現(xiàn)細(xì)節(jié):
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小伙伴沒有發(fā)現(xiàn),尾遞歸的實(shí)現(xiàn)中,每一次函數(shù)遞歸調(diào)用都會將一個(gè)階段性的結(jié)果傳遞到下一次被調(diào)用的函數(shù)中,當(dāng)最終的一般終止條件滿足時(shí),把最終結(jié)果直接返回 。

    推薦閱讀