欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

遞歸需要有邊界條件

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

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

二、遞歸函數(shù)

函數(shù)體內部可以調用自己

遞歸函數(shù)

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

遞歸函數(shù)是遞歸的數(shù)學思想在程序設計中的應用

  • 遞歸函數(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;
}

輸出結果如下:

五、遞歸函數(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;
}

輸出結果如下:

六、遞歸函數(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;
}

輸出結果如下:

七、小結

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

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

相關文章

  • 使用C語言構建基本的二叉樹數(shù)據(jù)結構

    使用C語言構建基本的二叉樹數(shù)據(jù)結構

    這篇文章主要介紹了使用C語言使用C語言構建基本的二叉樹數(shù)據(jù)結構,包括根據(jù)前序序列和中序序列構建二叉樹的方法,需要的朋友可以參考下
    2015-08-08
  • string居然也可以用<<和>>

    string居然也可以用<<和>>

    今天小編就為大家分享一篇關于string居然也可以用<<和>>,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C語言中“不受限制”的字符串函數(shù)總結

    C語言中“不受限制”的字符串函數(shù)總結

    這篇文章主要給大家總結介紹了C語言中一些“不受限制”的字符串函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Qt利用QNetwork實現(xiàn)上傳數(shù)據(jù)的示例代碼

    Qt利用QNetwork實現(xiàn)上傳數(shù)據(jù)的示例代碼

    這篇文章主要為大家詳細介紹了Qt如何利用QNetwork實現(xiàn)上傳數(shù)據(jù)的 功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • VC文件目錄常見操作實例匯總

    VC文件目錄常見操作實例匯總

    這篇文章主要介紹了VC文件目錄常見操作實例匯總,總結了VC針對文件目錄的各種常用操作,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

    這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++多態(tài)的示例詳解

    C++多態(tài)的示例詳解

    多態(tài)按字面的意思就是多種形態(tài)。當類之間存在層次結構,并且類之間是通過繼承關聯(lián)時,就會用到多態(tài)。本文將通過三個小案例讓大家更深入的了解一下C++的多態(tài),感興趣的可以了解一下
    2022-06-06
  • C++中使用cout以hex格式輸出方式

    C++中使用cout以hex格式輸出方式

    這篇文章主要介紹了C++中使用cout以hex格式輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言 結構體(Struct)詳解及示例代碼

    C語言 結構體(Struct)詳解及示例代碼

    本文主要介紹C語言 結構體的知識,學習C語言肯定需要學習結構體,這里詳細說明了結構體并附示例代碼,供大家參考學習,有需要的小伙伴可以參考下
    2016-08-08
  • Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法

    Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法

    這篇文章主要介紹了Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法,請注意代碼中包含大量注釋,需要的朋友可以參考下
    2014-09-09

最新評論