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

C語言之函數(shù)遞歸的實現(xiàn)

 更新時間:2023年07月05日 08:51:19   作者:iLoyo_  
本文主要介紹了C語言之函數(shù)遞歸的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. 概念

C語言中,函數(shù)直接或間接調(diào)用函數(shù)本身,則該函數(shù)稱為遞歸函數(shù)。

遞歸做為一種算法在程序設(shè)計語言中廣泛應用。一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解。

遞歸的主要思考方式在于:把大事化小

2. 遞歸的兩個必要條件

//例子:
void func()
{
	//...
	if(...)
		func();//調(diào)用自身
	else
	//...
}

在上面的例子中能夠看出,它必須滿足以下兩個條件:

?? 在每一次調(diào)用自己時,必須是(在某種意義上)更接近于解;?? 必須有一個終止處理或計算的限制條件,當滿足這個限制條件的時候,遞歸便不再繼續(xù)。

??實例1:

接收一個整型值(無符號),按照順序打印他的每一位。
例如:
   輸入123,輸出1 2 3

非遞歸:

#include<stdio.h>
int main()
{
	int n=123;
	int a = n / 100;//取百位
	int b = (n / 10)%10;//取十位
	int c = n % 10;//取個位
	//依次輸出
	printf("%d %d %d\n", a, b, c);
	return 0;
}

遞歸

#include<stdio.h>
void Fun_c(int x)
{
	if (x >9)//限制條件
	{
	Fun_c(x/10);
	}
	printf("%d ", x%10);
}
int main()
{
	int n;
	scanf("%d", &n);
	Fun_c(n);
	return 0;
}

圖解:

??實例2:

編寫函數(shù)不允許創(chuàng)建臨時變量,求字符串的長度。

int Length(char* s)
{
	if (*s == '\0')//限制條件
		return 0;
	else
		return 1 + Length(s + 1);
}
#include<stdio.h>
int main()
{
	char* ch = "iloveC";//字符串結(jié)束標志:'\0'
	int len = Length(ch);
	printf("%d", len);
	return 0;
}

第一次 s=“iloveC\0”------5+1
第二次 s=“loveC\0”-----4+1
第三次 s=“oveC\0”----3+1
第四次 s=“veC\0”----2+1 ( 回退)
第五次 s=“eC\0”----1+1
第六次 s=“C\0”----1+0
第七次 s=“\0”-----0

3. 遞歸與迭代

3.1 求n的階乘

//遞歸
#include<stdio.h>
int Fac(int n)
{
	if (n == 1)//限制條件
		return 1;
	else
		return n * Fac(n - 1);
}
int main()
{
	int n;
	scanf("%d", &n);
	int temp = Fac(n);
	printf("%d\n", temp);
	return 0;
}
//迭代
int Fac(int n)
{
	int temp = 1;
	for (int i = 1; i <= n; i++)
	{
		temp = temp * i;
	}
	return temp;
}
#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	printf("%d\n", Fac(n));
	return 0;
}

3.2 求第n個斐波那契數(shù)

1 1 2 3 5 8 13 21…
從第三位開始,后一項等于前兩項之和

//遞歸
#include<stdio.h>
int Fib(int n)
{
	if (n == 1 || n == 2)//限制條件
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}
int main()
{
	int n;
	scanf("%d", &n);
	printf("%d\n", Fib(n));
	return 0;
}
//迭代
#include<stdio.h>
int Fib(int n)
{
	int a = 1;
	int b = 1;
	int c;
	while (n >= 3)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main()
{
	int n;
	scanf("%d", &n);
	printf("%d\n", Fib(n));
	return 0;
}

注:
?? 許多問題是以遞歸的形式進行解釋的,這只是因為它比非遞歸的形式更為清晰。
?? 但是這些問題的迭代實現(xiàn)往往比遞歸實現(xiàn)效率更高,雖然代碼的可讀性稍微差些。
?? 當一個問題相當復雜,難以用迭代實現(xiàn)時,此時遞歸實現(xiàn)的簡潔性便可以補償它所帶來的運行時開銷。

結(jié)束語

遞歸是函數(shù)實現(xiàn)的一個很重要的環(huán)節(jié),我們不但要理解,還要掌握,能夠熟練使用遞歸。

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

相關(guān)文章

  • C語言的字符空間與非字符空間你了解嗎

    C語言的字符空間與非字符空間你了解嗎

    這篇文章主要介紹了C語言的字符空間與非字符空間,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C++中的變長參數(shù)深入理解

    C++中的變長參數(shù)深入理解

    變長參數(shù)的函數(shù),即參數(shù)個數(shù)可變、參數(shù)類型不定的函數(shù)。設(shè)計一個參數(shù)個數(shù)可變、參數(shù)類型不定的函數(shù)是可能的,最常見的例子是printf函數(shù)、scanf函數(shù)和高級語言的Format函數(shù)。最近的一個項目中就遇到這么一個相關(guān)的問題,感興趣的朋友們下面來一起看看吧。
    2016-10-10
  • Linux UDP服務(wù)端和客戶端程序的實現(xiàn)

    Linux UDP服務(wù)端和客戶端程序的實現(xiàn)

    這篇文章主要介紹了Linux UDP服務(wù)端和客戶端程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • C語言實現(xiàn)單詞小幫手

    C語言實現(xiàn)單詞小幫手

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)單詞小幫手,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • windows下如何安裝OpenCL

    windows下如何安裝OpenCL

    這篇文章主要介紹了windows下如何安裝OpenCL,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • c++ 有趣的動態(tài)轉(zhuǎn)換

    c++ 有趣的動態(tài)轉(zhuǎn)換

    這篇文章主要介紹了c++ 動態(tài)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和使用c++編程,感興趣的朋友可以了解下
    2020-09-09
  • C++中各種類型數(shù)據(jù)標簽分發(fā)傳遞詳解

    C++中各種類型數(shù)據(jù)標簽分發(fā)傳遞詳解

    這篇文章主要介紹了C++中各種類型數(shù)據(jù)標簽分發(fā)傳遞,類型標簽分發(fā)是一種技術(shù),它允許基于對象的類型來選擇不同的函數(shù)重載,這種方法通常用于泛型編程中,特別是在處理不同類型的對象但又需要針對每種類型進行特定操作時,需要的朋友可以參考下
    2025-10-10
  • 關(guān)于C++繼承你可能會忽視的點

    關(guān)于C++繼承你可能會忽視的點

    繼承是面向?qū)ο笕筇匦灾?有些類與類之間存在特殊的關(guān)系,下面這篇文章主要給大家介紹了關(guān)于C++繼承你可能會忽視的點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 詳析C++中的auto

    詳析C++中的auto

    這篇文章主要介紹了詳析C++中的auto,auto是具有自動存儲器的局部變量,C++11中,標準委員會賦予了auto全新的含義即:auto不再是一個存儲類型指示符,而作為一個新的類型指示符來指示編譯器,下面來看看文章的詳細介紹吧
    2022-01-01
  • 詳解C++ cin.getline函數(shù)

    詳解C++ cin.getline函數(shù)

    這篇文章主要介紹了C++ cin.getline函數(shù)的相關(guān)資料,幫助大家更好的理解和學習C++,感興趣的朋友可以了解下
    2020-09-09

最新評論

襄垣县| 兴海县| 琼结县| 高要市| 隆林| 青冈县| 阜平县| 西平县| 郯城县| 泰宁县| 巴里| 平武县| 哈尔滨市| 贡嘎县| 磐石市| 始兴县| 黑河市| 乐至县| 济源市| 桃江县| 朔州市| 山东| 孙吴县| 南宁市| 泰兴市| 章丘市| 中江县| 宁陵县| 常德市| 和林格尔县| 澎湖县| 上虞市| 四子王旗| 长汀县| 丽水市| 新泰市| 舞阳县| 七台河市| 福泉市| 平武县| 吐鲁番市|