C語(yǔ)言遞歸在實(shí)踐題目中應(yīng)用詳解
遞歸知識(shí)點(diǎn)
遞歸概念:程序調(diào)用自身的編程技巧稱(chēng)為遞歸( recursion)。 遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。 一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接 調(diào)用自身的 一種方法,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解, 遞歸策略 只需少量的程序就可描述出解題過(guò)程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。
通俗理解就是:函數(shù)自己調(diào)用自己
遞歸的主要思考方式就是大事化小
遞歸的兩個(gè)必要條件
1.存在限制條件,當(dāng)滿(mǎn)足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)
2.每次遞歸調(diào)用之后越來(lái)越接近這個(gè)限制條件
(滿(mǎn)足以上必要條件的不一定是遞歸,但不滿(mǎn)足條件的一定不是遞歸)
題目
第一題
接收一個(gè)整型數(shù)值,按照順序打印它的每一位
輸入:1234 輸出:1 2 3 4

來(lái)看看函數(shù)內(nèi)部:

#include <stdio.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
print(n);
return 0;
}第二題
求 n 的階乘

進(jìn)入函數(shù)內(nèi)部:

#include <stdio.h>
int factorial(int n)
{
if (n <= 1)
return 1;
else
return n * factorial(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = factorial(n);
printf("%d\n", ret);
return 0;
}第三題
用遞歸的方法求字符串長(zhǎng)度

#include <stdio.h>
int my_strlen(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "hello";
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}第四題
用遞歸求第n個(gè)斐波那契數(shù)(不考慮溢出)

進(jìn)入函數(shù)內(nèi)部:

#include <stdio.h>
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}第五題


進(jìn)入函數(shù)內(nèi)部:

#include <stdio.h>
int Dig(int n)
{
if (n > 9)
return Dig(n / 10) + n % 10;
else
return n;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Dig(n);
printf("%d\n", ret);
return 0;
}第六題
用遞歸實(shí)現(xiàn) n 的 k 次方

進(jìn)入函數(shù)內(nèi)部:

#include <stdio.h>
double Pow(int n, int k)
{
if (k > 0)
return n * Pow(n, k - 1);
else if (k == 0)
return 1;
else
return 1.0 / Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret = Pow(n, k);
printf("%lf\n", ret);
return 0;
}第七題
小樂(lè)樂(lè)上課需要走 n 階臺(tái)階,
所以每次可以選擇走一階或者走兩階,那么他一共有多少種走法?

進(jìn)入函數(shù)內(nèi)部:

#include <stdio.h>
int jump(int n)
{
if (n <= 2)
return n;
else
return jump(n - 1) + jump(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret=jump(n);
printf("%d\n", ret);
return 0;
}到此這篇關(guān)于C語(yǔ)言遞歸在實(shí)踐題目中應(yīng)用詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于C語(yǔ)言 文件讀寫(xiě) feof 函數(shù)
這篇文章主要給大家分享的是關(guān)于C語(yǔ)言文件讀寫(xiě) feof 函數(shù) ,feof 是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),其功能是檢測(cè)文件結(jié)束符,如果文件結(jié)束,則返回非 0 值,否則返回 0,感興趣的小伙伴請(qǐng)跟小編一起來(lái)看看下面文章的內(nèi)容吧2021-10-10
JetBrains?CLion永久激活超詳細(xì)教程(最新激活方法)
JetBrains?Clion?是一款專(zhuān)為?C/C++?開(kāi)發(fā)所設(shè)計(jì)的跨平臺(tái)?IDE,本文適用?JetBrains?CLion?v2019.3/3.1/3.2/3.3?永久激活,附破解補(bǔ)丁和激活碼,可以永久激活?Windows、MAC、Linux?下的?CLion,下面給大家分享JetBrains?CLion永久激活超詳細(xì)教程,感興趣的朋友一起看看吧2023-01-01
C++類(lèi)與對(duì)象深入之引用與內(nèi)聯(lián)函數(shù)與auto關(guān)鍵字及for循環(huán)詳解
朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對(duì)一些C++的入門(mén)知識(shí)做了些總結(jié),整理出來(lái)一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們?cè)谠u(píng)論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步2022-06-06
Qt實(shí)現(xiàn)小功能之圓形進(jìn)度條的方法詳解
在Qt自帶的控件中,只有垂直進(jìn)度條、水平進(jìn)度條兩種。在平時(shí)做頁(yè)面開(kāi)發(fā)時(shí),有些時(shí)候會(huì)用到圓形進(jìn)度條,比如說(shuō):下載某個(gè)文件的下載進(jìn)度。本文就來(lái)實(shí)現(xiàn)一個(gè)圓形進(jìn)度條,需要的可以參考一下2022-10-10
淺談C++為什么非要引入那幾種類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了C++為什么非要引入那幾種類(lèi)型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C/C++實(shí)現(xiàn)快速排序算法的兩種方式實(shí)例
快速排序是一種采用分治思想,在實(shí)踐中通常運(yùn)行較快一種排序算法,這篇文章主要給大家介紹了關(guān)于C/C++實(shí)現(xiàn)快速排序的兩種方式的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下2021-08-08

