您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言遞歸在實踐題目中如何應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言遞歸在實踐題目中如何應用”吧!
遞歸概念:程序調用自身的編程技巧稱為遞歸( recursion)。 遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接 調用自身的 一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解, 遞歸策略 只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。
通俗理解就是:函數自己調用自己
遞歸的主要思考方式就是大事化小
遞歸的兩個必要條件
1.存在限制條件,當滿足這個限制條件的時候,遞歸便不再繼續
2.每次遞歸調用之后越來越接近這個限制條件
(滿足以上必要條件的不一定是遞歸,但不滿足條件的一定不是遞歸)
接收一個整型數值,按照順序打印它的每一位
輸入:1234 輸出:1 2 3 4
來看看函數內部:
#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 的階乘
進入函數內部:
#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個斐波那契數(不考慮溢出)
進入函數內部:
#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; }
進入函數內部:
#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; }
用遞歸實現 n 的 k 次方
進入函數內部:
#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 階臺階,
所以每次可以選擇走一階或者走兩階,那么他一共有多少種走法?
進入函數內部:
#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; }
到此,相信大家對“C語言遞歸在實踐題目中如何應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。