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

C語(yǔ)言 function recursion函數(shù)遞歸詳解

 更新時(shí)間:2021年10月22日 10:18:01   作者:Dark And Grey  
遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法,舉個(gè)例子: 從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去

function recursion(函數(shù)遞歸)

函數(shù)遞歸: 是在 一個(gè) 過程 或 函數(shù) 在其定義或說明中有 直接 或 間接 調(diào)用自身 的一種方法

通常把一個(gè) 大型復(fù)雜的問題 層層 傳化 為一個(gè)與 原理相似的 ,規(guī)模較小 的問題

遞歸策略 只需 少量的程序 就可以描述出 解題過程 所需的 多次 重復(fù) 計(jì)算,大大減少了程序的代碼量

遞歸的中心思想為:

大事化小。

程序一

#include<stdio.h>
int main()
{
    printf("hehe");
    main();//陷入死循環(huán),但因?yàn)闂R绯?,最后?huì)停下來 == stack overflow - 棧溢出

 任何一次函數(shù)調(diào)用,它都會(huì)向內(nèi)存申請(qǐng)空間,分為三部分 棧區(qū),堆區(qū),靜態(tài)區(qū)

 棧區(qū) :局部變量,函數(shù)的形參

堆區(qū): 動(dòng)態(tài)開辟的內(nèi)存 - malloc(分配內(nèi)存) and calloc(動(dòng)態(tài)內(nèi)存分配并初始化零)

 靜態(tài)區(qū): 全局變量,static修飾的變量
    return 0;
}

遞歸的兩個(gè)必要條件

1,存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸將不再繼續(xù)
2.每次遞歸調(diào)用之后越來越接近這個(gè)條件

程序一:

#include<stdio.h>
一共調(diào)用三次 
1                                                    2                                    3
void print(int n)// n == 123                       void print(int n)n == 12         void print(int n)  m == 1 
{                                           //    {                                 {                                             
    if (n > 9)                             //         if (n > 9)                        if (n > 9)         
    {                                       //        {                                {                                       
        print(n / 10);// 這里再調(diào)用 print 函數(shù)            print(n / 10);                  print(n / 10);            
    }                                      //         }                                }
    printf("%d ",n%10);   // 最后打印3  //           printf("%d ",n%10); 再打印個(gè)2      printf("%d ",n%10); 首先打印 1
}                                          //     }                                 }   
int main()
{
    unsigned int num = 0;
    scanf("%d",&num);//123
    //遞歸
    print(num);//1 2 3 
    return 0;
}

程序二:

#include<stdio.h>
#include<string.h>

寫法1(計(jì)數(shù)器)
int my_strlen(char* str)//str指針變量,需要返回整形
{
    int count = 0;   
    while (*str != '\0')
    {
        count++;
        str ++;
    }
    return count;
}
寫法2(遞歸)
int my_strlen(char* str)//str指針變量,需要返回整形
{
    if (*str != '\0')
    {
        return 1 + my_strlen(str + 1);
    }
    else
        return 0;
}
int main()
{
    char arr[] = "bit";
    //int len = strlen(arr);
    //printf("%d\n", len);

    //模擬實(shí)現(xiàn)一個(gè)strlen函數(shù)
    int len = my_strlen(arr);
    printf("len = %d\n",len);
    return 0;
}

練習(xí)

求n的階乘

迭代與遞歸

#include<stdio.h>
1 迭代方式
 int facl(int n)
{
    int i = 0;
    int ret = 1;
    for (i = 1; i <= n; i++)
    {
        ret = ret*i;
    }
    return ret;
}

遞歸方式
int facl(int n)
{
    if (n <= 1)
    {
        return 1;
    }
    else
        return n*facl(n - 1);
        這里說明一下思維
        假設(shè) 我們 要求 10 的階乘 1x1x2x3x4x5x6x7x8x9x10
        我們的 n 一開始是 10, 10*facl(n-1) ,其實(shí) facl 函數(shù) 就是 把 10 減一,遞歸就好像是循環(huán),循環(huán)的目的,就是 得到 10每次減一的結(jié)果,直到它等于1,再讓其鏈接起來,
        你可以這么看
        10 *(9 * (8 * (7 * ((6 * (5 * (4 *(3 * (2 * (1 * (1))))))))))
        等價(jià)于
        10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 * 1
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int ret = facl(n);//循環(huán)方式
    printf("%d\n",ret);
    return 0;
}


再來道例題

斐波那契函數(shù) 1 1 2 3 5 8 13 21
從 第三個(gè)數(shù) 開始,該數(shù)等前面兩個(gè)數(shù)的和。
求第第n個(gè)斐波那契函數(shù)

#include<stdio.h>
這題用遞歸效率很低,很多數(shù)會(huì)重復(fù)計(jì)算
int fib(int n)
{
    if (n <= 2)
        return 1;
    else
        return fib(n - 1)+fib(n - 2);// 因?yàn)?函數(shù) 每得到一個(gè)數(shù),就需要將得到的數(shù)進(jìn)行分解成 2個(gè) 部分
}

2迭代(循環(huán))方式(簡(jiǎn)單加法)
效率更高
int fib(int n)
{
    int a = 1;
    int b = 1;
    int c = 1;
    while (n>2)// 
    {
        c = a + b;
        a = b;
        b = c;
        n--;
    }
    return c;
}

int main()
{
    int n = 0;
    scanf("%d",&n);
    int ret = fib(n);
    printf("%d\n",ret);
    return 0;
}

在這里插入圖片描述

到此這篇關(guān)于C語(yǔ)言 function recursion函數(shù)遞歸詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 函數(shù)遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中的柔性數(shù)組你真的了解嗎

    C語(yǔ)言中的柔性數(shù)組你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中的柔性數(shù)組你,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • c語(yǔ)言多進(jìn)程tcp服務(wù)器示例

    c語(yǔ)言多進(jìn)程tcp服務(wù)器示例

    這篇文章主要介紹了c語(yǔ)言多進(jìn)程tcp服務(wù)器示例,多進(jìn)程socket,epoll實(shí)現(xiàn)IO復(fù)用,需要的朋友可以參考下
    2014-03-03
  • C++ 名稱空間詳情

    C++ 名稱空間詳情

    當(dāng)一個(gè)項(xiàng)目變得大型之后,我們會(huì)引入很多的庫(kù),這么一來兩個(gè)庫(kù)很可能會(huì)定義List、Tree、Node同名的類,編譯器要是不考慮這情況的話,程序員調(diào)用時(shí)就會(huì)出現(xiàn)沖突問題。C++提供了名稱空間工具,以更好的控制名稱的作用域,本文就來談?wù)凜++ 名稱空間,需要的朋友可以參考一下
    2021-09-09
  • C語(yǔ)言初識(shí)變量常量字符串轉(zhuǎn)義符及注釋方式簡(jiǎn)介

    C語(yǔ)言初識(shí)變量常量字符串轉(zhuǎn)義符及注釋方式簡(jiǎn)介

    最強(qiáng)的C語(yǔ)言筆記,此處對(duì)于C語(yǔ)言的基礎(chǔ)部分做一個(gè)簡(jiǎn)要的介紹,作者實(shí)屬初學(xué),寫博客也是作者學(xué)習(xí)的一個(gè)過程,若文中內(nèi)容有理解不到位或者有不當(dāng)之處,還請(qǐng)朋友們不吝指正
    2021-11-11
  • C++中函數(shù)模板與類模板的簡(jiǎn)單使用及區(qū)別介紹

    C++中函數(shù)模板與類模板的簡(jiǎn)單使用及區(qū)別介紹

    這篇文章介紹了C++中的模板機(jī)制,包括函數(shù)模板和類模板的概念、語(yǔ)法和實(shí)際應(yīng)用,函數(shù)模板通過類型參數(shù)實(shí)現(xiàn)泛型操作,而類模板允許創(chuàng)建可處理多種數(shù)據(jù)類型的類,文章還討論了模板的關(guān)鍵區(qū)別、注意事項(xiàng)以及它們?cè)趯?shí)際編程中的應(yīng)用,感興趣的朋友一起看看吧
    2025-03-03
  • C++深度探索虛函數(shù)覆蓋示例

    C++深度探索虛函數(shù)覆蓋示例

    虛函數(shù)主要通過V-Table虛函數(shù)表來實(shí)現(xiàn),該表主要包含一個(gè)類的虛函數(shù)的地址表,可解決繼承、覆蓋的問題,下面這篇文章主要給大家介紹了如何通過一篇文章帶你掌握C++虛函數(shù)的來龍去脈,需要的朋友可以參考下
    2022-12-12
  • C++深入了解模板的使用

    C++深入了解模板的使用

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例

    Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例

    本文主要介紹了Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語(yǔ)言實(shí)現(xiàn)對(duì)文件進(jìn)行操作的示例詳解

    C語(yǔ)言實(shí)現(xiàn)對(duì)文件進(jìn)行操作的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)對(duì)文件進(jìn)行操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定的幫助,需要的可以參考一下
    2023-04-04
  • 解析C++ 浮點(diǎn)數(shù)的格式化輸出

    解析C++ 浮點(diǎn)數(shù)的格式化輸出

    本篇文章是對(duì)C++中浮點(diǎn)數(shù)的格式化輸出進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

精河县| 沁源县| 松潘县| 牙克石市| 浮梁县| 页游| 鱼台县| 积石山| 柯坪县| 苏尼特右旗| 新乐市| 泗阳县| 玉林市| 内江市| 会同县| 教育| 临湘市| 中牟县| 大邑县| 英山县| 鲁甸县| 祥云县| 松桃| 黔南| 稻城县| 九江县| 涿州市| 嵩明县| 万载县| 庆安县| 雅江县| 怀宁县| 墨玉县| 万载县| 古浪县| 甘泉县| 象山县| 临夏市| 高邑县| 梨树县| 石首市|