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

C語(yǔ)言遞歸系列的深入總結(jié)

 更新時(shí)間:2021年02月08日 14:25:20   作者:daener  
這篇文章主要給大家總結(jié)介紹了關(guān)于C語(yǔ)言遞歸系列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

遞歸

什么是遞歸

遞歸簡(jiǎn)而言之就是函數(shù)自己調(diào)用自己 如圖所示

但是遞歸并不是簡(jiǎn)簡(jiǎn)單單的自己調(diào)用自己的過(guò)程 它分為 傳遞回歸,傳遞就是橙色箭頭 回歸則是黑色箭頭 這就是遞歸
以 計(jì)算階乘為例,假設(shè)我們輸入6 計(jì)算6的階乘為例

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorial(int x) //遞歸體函數(shù)
{
	if (x == 1)
	{
		return 1; 
	}
	return x * (factorial(x - 1));
}
int main()
{
	int i = 0;
	scanf("%d", & i);
	int k = factorial(i);
	printf("%d", k);
	return 0;
}

具體實(shí)現(xiàn)過(guò)程如下 我們可以很清楚看到 先傳遞 在歸一 就是遞歸

遞歸的特點(diǎn) 結(jié)構(gòu) 缺點(diǎn)

遞歸的本質(zhì)

在傳遞的過(guò)程將問(wèn)題化簡(jiǎn) 歸一的過(guò)程將化簡(jiǎn)的問(wèn)題解決

遞歸的應(yīng)用

(1). 問(wèn)題的定義是按遞歸定義的(Fibonacci函數(shù),階乘,…);

(2). 問(wèn)題的解法是遞歸的(有些問(wèn)題只能使用遞歸方法來(lái)解決,例如,漢諾塔問(wèn)題,…);

(3). 數(shù)據(jù)結(jié)構(gòu)是遞歸的(鏈表、樹(shù)等的操作,包括樹(shù)的遍歷,樹(shù)的深度,…)

遞歸實(shí)戰(zhàn)

階乘

階乘遞歸解法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorial(int x) // 遞歸體
{
	if (x == 1)// 函數(shù)出口
	{
		return 1; 
	}
	return x * (factorial(x - 1));//就x!轉(zhuǎn)換成X*((x-1)!) 達(dá)到傳遞化簡(jiǎn)的目的
}
int main()
{
	int i = 0;
	scanf("%d", & i);
	int k = factorial(i);
	printf("%d", k);
	return 0;
}

階乘普通解法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int k = 0;
	scanf("%d", &k);
	int i = 0;
	int sum = 1;
	for (i = 1; i < k + 1; i++)
	{
		sum = sum * i; //利用循環(huán)累乘 最后打印
	}
	printf("%d", sum);
	return 0;
}

斐波拉契數(shù)列

斐波拉契數(shù)列 即0、1、1、2、3、5、8、13、21、34、………這樣一串?dāng)?shù)字

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

遞歸解法通過(guò)數(shù)學(xué)函數(shù)定義可輕松得到 他的遞歸體

是當(dāng)n>1時(shí) fib(n-2)+fib(n-1)

遞歸出口就是n=0 返回0,n=1,返回1

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fib(int x) //第0個(gè)元素為0 第一個(gè)元素為1
{
	if (x == 0)
	{
		return 0;

	}
	else if (x == 1) //出口
	{
		return 1;
	}
	else
		return fib(x - 2) + fib(x - 1); //循環(huán)體 
}


int main()
{
	int k = 0;
	scanf("%d", &k);
	int sum = fib(k);
	printf("%d", sum);
	return 0;
}

斐波拉契數(shù)列普通解法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int fib(int x)
{
	int i = 0;
	int j = 1;
	int k = 0;
	int m = 0;
	for (m = 0; m < x-1; m++)
	{
		k = i + j;
		i = j;
		j = k;
	}
	return k;
}

int main()
{
	int k = 0;
	scanf("%d", &k);
	int sum = fib(k);
	printf("%d", sum);
	return 0;
}

漢諾塔

漢諾塔簡(jiǎn)單了解

輸出一個(gè)數(shù)字的每一位

如 輸入 1234 輸出 1 2 3 4

普通解法

這里用取對(duì)數(shù)的方法得到有多少位 依次除以位數(shù)的10次方 即可

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void elect(int x)
{
	printf("逆序輸出");
	float k = 0.1;
	int m = 0;
	do
	{
		m = x % 10;
		k = k * 10;
		printf("%d是%f位",m,k);
		x = x / 10;
		if (x < 9)
		{
			k = k * 10;
			printf("%d是%f位", m, k);
			break;
		}
	} while (1);
	printf("\n \n");
}
void elect2(int x)
{
	printf("順序輸出");
	int digit = log10(x) ;
	
	int i = 0;
	int m = 0;
	for (i = pow(10, digit); i >0; i = i / 10)
	{
		m = x / i;
		printf("%d ", m);
		x = x % i;
	}
	
}
int main()
{
	int k = 0;
	scanf("%d", &k);
	//elect(k);
	elect2(k);
	return 0;
}

遞歸解法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void elect(int x)
{ 

	if (x > 9)
	{
		elect(x / 10); //遞歸體 通過(guò)除以10 來(lái)使得問(wèn)題更接近正確答案
		
	}
	printf("%d ", x % 10);//出口

}
int main()
{
	int k = 0;
	scanf("%d", &k);
	elect(k);
	return 0;
}

倒序保存字符串

將參數(shù)字符串中的字符反向排列,不是逆序打印

遞歸解法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdio.h>
#include<string.h>
void reverse_string(char arr[])
{
	int sz = strlen(arr);
	int tmp = *arr;
	*arr = *(arr + sz - 1); //將最后一個(gè)和第一個(gè)互換
	*(arr + sz - 1) = '\0';// 將最后一個(gè)賦值為0
	if (strlen(arr) > 1)//如果不是最后一個(gè)則 指針后移
	{
		reverse_string(arr + 1);
	}
		
	
	*(arr + sz - 1) = tmp;
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
}

總結(jié)

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

相關(guān)文章

  • 使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

    使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

    這篇文章主要介紹了使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C++判斷子序列題目詳解

    C++判斷子序列題目詳解

    這篇文章主要為大家介紹了C++判斷子序列題目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Visual Studio中scanf函數(shù)報(bào)錯(cuò)的幾種解決方法

    Visual Studio中scanf函數(shù)報(bào)錯(cuò)的幾種解決方法

    本文主要介紹了Visual Studio中scanf函數(shù)報(bào)錯(cuò)的幾種解決方法,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • OpenGL繪制三次Bezier曲線

    OpenGL繪制三次Bezier曲線

    這篇文章主要為大家詳細(xì)介紹了OpenGL繪制三次Bezier曲線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語(yǔ)言位圖及位圖的實(shí)現(xiàn)

    C語(yǔ)言位圖及位圖的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言位圖及位圖的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++超詳細(xì)講解友元與內(nèi)部類

    C++超詳細(xì)講解友元與內(nèi)部類

    朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對(duì)我們對(duì)C++的友元,內(nèi)部類知識(shí)點(diǎn)做出總結(jié),整理出來(lái)一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們?cè)谠u(píng)論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-06-06
  • Qt QFrame的具體使用

    Qt QFrame的具體使用

    本文主要介紹了Qt QFrame的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Qt6.0+vs2019環(huán)境配置的實(shí)現(xiàn)教程

    Qt6.0+vs2019環(huán)境配置的實(shí)現(xiàn)教程

    這篇文章主要介紹了Qt6.0+vs2019環(huán)境配置的實(shí)現(xiàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    從 C++11 開(kāi)始,標(biāo)準(zhǔn)庫(kù)提供了 std::bind 用于綁定函數(shù) f 和調(diào)用參數(shù),返回一個(gè)新可調(diào)用函數(shù)對(duì)象 fn,下面就跟隨小編一起深入了解一下std::bind的具體使用吧
    2023-12-12
  • C語(yǔ)言中指針常量和常量指針的區(qū)別

    C語(yǔ)言中指針常量和常量指針的區(qū)別

    本文主要介紹了C語(yǔ)言中指針常量和常量指針的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

澄迈县| 松潘县| 贵溪市| 镇巴县| 边坝县| 潼关县| 大理市| 社旗县| 观塘区| 海晏县| 高邮市| 浦北县| 商水县| 且末县| 泸州市| 克什克腾旗| 万源市| 海林市| 安庆市| 丽江市| 特克斯县| 惠来县| 贞丰县| 容城县| 南丰县| 子长县| 江孜县| 泊头市| 韶山市| 宽甸| 乌审旗| 浪卡子县| 双峰县| 大方县| 钟祥市| 长葛市| 明水县| 黑河市| 河北省| 六枝特区| 建阳市|