C语言 函数递归例题解析
生活随笔
收集整理的這篇文章主要介紹了
C语言 函数递归例题解析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 1.接受一個整形值(無符號),把它轉(zhuǎn)換為 字符并打印它
- 模擬實(shí)現(xiàn)strlen()函數(shù)。
- 3.求n的階乘
- 4.斐波那契數(shù)列
- 總結(jié)
1.接受一個整形值(無符號),把它轉(zhuǎn)換為 字符并打印它
void fun(int x) {if (x > 9){fun(x/10);}printf("%d\n", x%10);} int main() {int a = 1234;fun(a);system("pause");return 0; }我們來看一下遞歸的過程
這時(shí)我們是不是可以理解了輸出的結(jié)果
模擬實(shí)現(xiàn)strlen()函數(shù)。
int my_strlen(char *str) {if (*str == '\0'){return 0;}else{return 1 + my_strlen(str+1);//return 1 + my_strlen(str++);//str++的副作用,每次傳過去的都是str}} int main() {char str1[] = "abcdefghijklmnopqrstuvwxyz";printf("%d", my_strlen(str1));system("pause");return 0;}我們來看一下這個函數(shù)
int my_strlen(char *str) {if (*str == '\0')return 0;elsereturn 1 + my_strlen(str+1); }遞歸很好用,但是要多多練習(xí)理解調(diào)用的過程
3.求n的階乘
int factorial(int x) {if (x <= 1)return 1;elsereturn x* factorial(x - 1); } int main() {int x = 5;factorial(x);system("pause");return 0; }4.斐波那契數(shù)列
int fib(int x) {if (x <= 2)return 1;elsereturn fib(x - 1) + fib(x - 2); } int main() {int x = 4;printf("%d",fib(x));system("pause");return 0; }棧溢出(死遞歸):系統(tǒng)分配給程序的棧空間是有限的,在死循環(huán)和死遞歸的情況下,一直在開辟棧空間,最終導(dǎo)致棧空間耗盡。
總結(jié)
- 很多問題用遞歸解決比非遞歸解決更清楚,也更容易實(shí)現(xiàn)
- 遞歸實(shí)現(xiàn)問題在處理較大數(shù)據(jù)時(shí),由于無限次調(diào)用自己容易導(dǎo)致棧溢出,所以它的效率會比迭代法低
- 迭代是更新變量的舊值。遞歸是在函數(shù)內(nèi)部調(diào)用自身
總結(jié)
以上是生活随笔為你收集整理的C语言 函数递归例题解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育研究基地学生票能不能用准考
- 下一篇: C语言 有符号字符型输出 面试题