C語言遞歸在實(shí)踐題目中應(yīng)用詳解
遞歸知識(shí)點(diǎn)
遞歸概念:程序調(diào)用自身的編程技巧稱為遞歸( recursion)。 遞歸做為一種算法在程序設(shè)計(jì)語言中廣泛應(yīng)用。 一個(gè)過程或函數(shù)在其定義或說明中有直接或間接 調(diào)用自身的 一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解, 遞歸策略 只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。
通俗理解就是:函數(shù)自己調(diào)用自己
遞歸的主要思考方式就是大事化小
遞歸的兩個(gè)必要條件
1.存在限制條件,當(dāng)滿足這個(gè)限制條件的時(shí)候,遞歸便不再繼續(xù)
2.每次遞歸調(diào)用之后越來越接近這個(gè)限制條件
(滿足以上必要條件的不一定是遞歸,但不滿足條件的一定不是遞歸)
題目
第一題
接收一個(gè)整型數(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 的階乘
進(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; }
第七題
小樂樂上課需要走 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語言遞歸在實(shí)踐題目中應(yīng)用詳解的文章就介紹到這了,更多相關(guān)C語言遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn)(保姆級(jí)成功版教程)
本文主要介紹了Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06C++實(shí)現(xiàn)LeetCode(115.不同的子序列)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(115.不同的子序列),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言入門篇--學(xué)習(xí)選擇,if,switch語句以及代碼塊
本篇文章是基礎(chǔ)篇,適合c語言剛?cè)腴T的朋友,本文主要帶大家學(xué)習(xí)一下C語言的選擇,if,switch語句及代碼塊,幫助大家快速入門c語言的世界,更好的理解c語言2021-08-08