最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言深入分析遞歸函數(shù)的實現(xiàn)

 更新時間:2022年04月15日 17:25:15   作者:清風自在 流水潺潺  
遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個函數(shù)(然后可能又調(diào)用第三個函數(shù)等),最后又調(diào)用第一個函數(shù)。因為函數(shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件

一、遞歸的數(shù)學(xué)思想

遞歸是一種數(shù)學(xué)上分而自治的思想

遞歸需要有邊界條件

  • 當邊界條件不滿足時,遞歸繼續(xù)進行
  • 當邊界條件滿足時,遞歸停止

遞歸將大型復(fù)雜問題轉(zhuǎn)化為與原問題相同但規(guī)模較小的問題進行處理。

二、遞歸函數(shù)

函數(shù)體內(nèi)部可以調(diào)用自己

遞歸函數(shù)

  • 函數(shù)體中存在自我調(diào)用的函數(shù)

遞歸函數(shù)是遞歸的數(shù)學(xué)思想在程序設(shè)計中的應(yīng)用

  • 遞歸函數(shù)必須有遞歸出口
  • 函數(shù)的無限遞歸將導(dǎo)致程序棧溢出而崩潰

三、遞歸函數(shù)設(shè)計技巧

遞歸模型的一般表示法

四、遞歸函數(shù)設(shè)計示例一

用遞歸的方法編寫函數(shù)求字符串長度

代碼如下:

#include <stdio.h>
 
int strlen_r(const char* s)
{
    if( *s )
    {
        return 1 + strlen_r(s+1);
    }
    else
    {
        return 0;
    }
}
 
int main()
{
    printf("%d\n", strlen_r("abc"));
    printf("%d\n", strlen_r(""));
    
    return 0;
}

輸出結(jié)果如下:

五、遞歸函數(shù)設(shè)計示例二

斐波拉契數(shù)列遞歸解法

1,1,2,3,5,8,13,21,...

代碼如下:

#include <stdio.h>
 
int fac(int n)
{
    if( n == 1 )
    {
        return 1;
    }
    else if( n == 2 )
    {
        return 1;
    }
    else
    {
        return fac(n-1) + fac(n-2);
    }
    
    return -1;
}
 
int main()
{
    printf("%d\n", fac(1));
    printf("%d\n", fac(2));
    printf("%d\n", fac(9));
    
    return 0;
}

輸出結(jié)果如下:

六、遞歸函數(shù)設(shè)計示例三

漢諾塔問題

  • 將木塊借助 B 柱由 A 柱移動到 C 柱
  • 每次只能移動一個木塊
  • 只能出現(xiàn)小木塊在大木塊之上

漢諾塔問題分解

  • 將 n-1 個木塊借助 C 柱由 A 柱移動到 B 柱
  • 將最底層的唯一木塊直接移動到 C 柱
  • 將 n-1 個木塊借助 A 柱由 B 柱移動到 C 柱

代碼如下:

#include <stdio.h>
 
void han_move(int n, char a, char b, char c)
{
    if( n == 1 )
    {
        printf("%c --> %c\n", a, c);
    }
    else
    {
        han_move(n-1, a, c, b);
        han_move(1, a, b, c);
        han_move(n-1, b, a, c);
    }
}
 
int main()
{
    han_move(3, 'A', 'B', 'C');
    
    return 0;
}

輸出結(jié)果如下:

七、小結(jié)

  • 遞歸是一種將問題分而自治的思想
  • 用遞歸解決問題首先要建立遞歸的模型
  • 遞歸解法必須要有邊界條件,否則無解

到此這篇關(guān)于C語言深入分析遞歸函數(shù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)C語言 遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Qt實現(xiàn)離線瓦片地圖下載器

    基于Qt實現(xiàn)離線瓦片地圖下載器

    這篇文章主要介紹了如何通過Qt實現(xiàn)離線瓦片地圖下載器,文中的示例代碼對我們學(xué)習(xí)或工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • Linux/Manjaro如何配置Vscode的C/C++編譯環(huán)境

    Linux/Manjaro如何配置Vscode的C/C++編譯環(huán)境

    這篇文章主要介紹了Linux/Manjaro配置Vscode的C/C++編譯環(huán)境,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 一文帶你了解C++中queue的使用

    一文帶你了解C++中queue的使用

    C++中的queue是一種容器,用于在FIFO(先進先出)原則下存儲和管理元素。本篇文章將深入探討C++中的queue,包括它的定義、使用、原理和示例,感興趣的可以了解一下
    2023-04-04
  • C語言 表、棧和隊列詳解及實例代碼

    C語言 表、棧和隊列詳解及實例代碼

    這篇文章主要介紹了C語言 表、棧和隊列詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C語言 遞歸解決青蛙跳臺階問題

    C語言 遞歸解決青蛙跳臺階問題

    遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用?;竞x&#8203;是指函數(shù)/過程/子程序在運行過程序中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。在計算機編程里,遞歸指的是一個過程:函數(shù)不斷引用自身,直到引用的對象已知
    2021-11-11
  • C++短路求值(邏輯與、邏輯或)實例

    C++短路求值(邏輯與、邏輯或)實例

    這篇文章主要介紹了C++短路求值(邏輯與、邏輯或)實例,以實例形式講述了邏輯或的短路與邏輯與的短路及相應(yīng)的應(yīng)用實例,需要的朋友可以參考下
    2014-10-10
  • C語言實現(xiàn)簡單井字棋游戲

    C語言實現(xiàn)簡單井字棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 淺談C語言中include

    淺談C語言中include""與include<>的區(qū)別

    C語言中包含文件有兩種包含符號,一個是<>尖括號,另一個是""雙引號。那么這兩個有什么區(qū)別呢?本文就詳細的介紹一下,感興趣的可以了解一下
    2021-06-06
  • C++ Qt實現(xiàn)瀏覽器網(wǎng)頁內(nèi)嵌的音視頻播放器

    C++ Qt實現(xiàn)瀏覽器網(wǎng)頁內(nèi)嵌的音視頻播放器

    這篇文章主要為大家詳細介紹了如何利用C++ Qt實現(xiàn)瀏覽器網(wǎng)頁內(nèi)嵌的音視頻播放器,并支持軟硬解碼,支持音頻,支持錄像截圖,支持多路播放等,感興趣的可以了解下
    2024-01-01
  • C語言中你容易忽略的知識點與技巧總結(jié)

    C語言中你容易忽略的知識點與技巧總結(jié)

    這篇文章主要給大家介紹了關(guān)于C語言中你容易忽略的知識點與技巧,文中通過實例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03

最新評論

梅河口市| 拉萨市| 德安县| 葫芦岛市| 富阳市| 株洲县| 卫辉市| 呈贡县| 绍兴县| 贡嘎县| 苏尼特左旗| 三明市| 句容市| 临高县| 大厂| 密云县| 民权县| 射洪县| 富民县| 老河口市| 万盛区| 古丈县| 湖南省| 澳门| 古蔺县| 莎车县| 梁山县| 沿河| 利津县| 万全县| 汨罗市| 阳高县| 武城县| 吉木乃县| 宁强县| 个旧市| 丹东市| 鄂州市| 平凉市| 楚雄市| 邵东县|