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

來看看函數(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 的階乘

進入函數(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;
}第三題
用遞歸的方法求字符串長度

#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個斐波那契數(shù)(不考慮溢出)

進入函數(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;
}第五題


進入函數(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;
}第六題
用遞歸實現(xiàn) n 的 k 次方

進入函數(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;
}第七題
小樂樂上課需要走 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īng)用詳解的文章就介紹到這了,更多相關(guān)C語言遞歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JetBrains?CLion永久激活超詳細教程(最新激活方法)
JetBrains?Clion?是一款專為?C/C++?開發(fā)所設(shè)計的跨平臺?IDE,本文適用?JetBrains?CLion?v2019.3/3.1/3.2/3.3?永久激活,附破解補丁和激活碼,可以永久激活?Windows、MAC、Linux?下的?CLion,下面給大家分享JetBrains?CLion永久激活超詳細教程,感興趣的朋友一起看看吧2023-01-01
C++類與對象深入之引用與內(nèi)聯(lián)函數(shù)與auto關(guān)鍵字及for循環(huán)詳解
朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對一些C++的入門知識做了些總結(jié),整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學(xué)習(xí),共同進步2022-06-06

