第三章-函式和遞迴2
阿新 • • 發佈:2021-10-19
1、遞迴
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的 一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。
遞迴的主要思考方式在於:把大事化小
#include<stdio.h> int main() { printf("hehe\n");//棧溢位--stack overflow //棧區 堆區 靜態區//區域性變數、函式形參 動態開闢記憶體malloc calloc 全域性變數static main();//自己呼叫自己 return 0; }
//接受一個整型值(無符號),按照順序列印它的每一位。 //輸入:1234,輸出 1 2 3 4 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void print(int n) { if (n > 9) { print(n / 10); } printf("%d ", n % 10); } int main() { unsignedint num = 0; scanf("%d", &num);//1234 print(num); return 0; }
2、遞迴的兩個必要條件
存在限制條件,當滿足這個限制條件的時候,遞迴便不再繼續。
每次遞迴呼叫之後越來越接近這個限制條件
//編寫函式不允許建立臨時變數,求字串的長度 #include <stdio.h> #include<string.h> int my_strlen(const char* str) { //遞迴 if (*str == '\0') return 0; else return1 + my_strlen(str + 1); } //int my_strlen(char* str) //{ // int count=0; // while(*ste=='0') // count++; // str++ //} //return count int main() { char arr[]= "bit"; int len =my_strlen(arr); printf("len=%d\n", len); return 0; }
1
1