【C語言】簡單的瞭解遞迴(求斐波那契,n的階乘,字串長度,把一個整型(無符號),轉化為字元型並打印出來)
阿新 • • 發佈:2019-02-01
簡單瞭解遞迴
1.什麼是遞迴???
程式設計程式呼叫自身的程式設計技巧稱為遞迴( recursion)
遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接 或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的 規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計 算,大大地減少了程式的程式碼量。
遞迴的主要思考方式在於:把大事化小
但是要特別注意在不停的呼叫函式自身是有可能會產生棧溢位
2.遞迴的兩個必要條件
(1.)存在限制條件,當滿足這個限制條件的時候,遞迴便便不再繼續。
(2.)每次遞迴呼叫之後越來越接近這個限制條件。
特點:能用遞迴處理的問題都是可以用它的子問題來處理(相同的程式碼)
接下來看道題
把一個整型(無符號),轉化為字元型並打印出來
例如:4567 輸出:4 5 6 7#include<stdio.h> #include<Windows.h> void print(num) { if (num > 9) { print(num/10); } printf("%c ", num % 10 + '0'); } int main() { int num = 0; num = 4567; print(num); system("pause"); return 0; }
2.編寫函式不允許建立臨時變數,求字串的長度
int Strlen(const char*str) { if (*str == '\0') return 0; else return 1 + Strlen(str + 1); } int main() { char *p = "abcdef1234"; int len = Strlen(p); printf("%d\n", len); system("pause"); return 0; }
3.求第n個斐波那契數列
例如:1、1、2、3、5、8、13、21、34、……這樣的一串數字叫做斐波那契數列3.int Fib(int n) { if (n <= 2) return 1; return Fib(n - 1) + Fib(n - 2); } int main() { int n = 0; printf("請輸入一個數》\n"); scanf_s("%d", &n); Fib(n); printf("%d\n", Fib(n)); system("pause"); return 0; }
4.求n的階乘(不考慮溢位)
int factorial(int num)
{
if (num == 1)
return 1;
return num * factorial(num - 1);
}
int main()
{
int num = 0;
printf("請輸入一個數:");
scanf_s("%d", &num);
factorial(num);
printf("%d\n", factorial(num));
system("pause");
return 0;
}