今天在昨天的基礎上學習了函數的遞回,簡單的舉了幾個例子來加強對函數遞回的認識,具體程式碼如下:
#include<stdio.h>
//int main() {
// printf(「hehe\n」);
// main();
// //最簡單的遞回呼叫
// return 0;
//}
//用遞回寫輸入1234 ,然後輸出 1 2 3 4
//void print(int n) {
// if (n > 9)
// print(n / 10);
// printf("%d ", n % 10);
//}
//int main() {
// int num = 1234;
// //遞回
// print(num);
// //(1234) 123 4
// //(123) 12
// //(12) 1
// return 0;
//}
//用遞回計算一個字串的長度,不能有臨時變數
//int my_strlen(char* str) {
// int count = 0;
// while (str!=’\0’) {
// count++;
// str++;
// }
// return count;
//}
//不建立臨時變數解決這個問題
//遞回,大事化小
//my_strlen(「bit」)
//1+mystrlen(「it」)
//1+1+mystrlen(「t」)
//1+1+1+mystrlen("")
//int my_strlen(char str) {
// if (*str != ‘\0’) {
// return 1 + my_strlen(str+1);
// }
// else {
// return 0;
// }
//}
//int main() {
// char arr[] = 「bit」;
// /int len = strlen(arr);
// printf("%d\n", len);/
// int len = my_strlen(arr);//arr是一個數組,函數傳上去的參數是陣列中首元素的一個地址
// printf(「len=%d\n」, len);
// return 0;
//}
//用遞回求n的階乘
//int Fac1(int n) {
// int i = 0;
// int ret = 1;
// for (i = 1; i <= n; i++) {
// ret *= i;
// }
// return ret;
//}
//int Fac2(int n) {
// if (n <= 1)
// return 1;
// else
// return n * Fac2(n - 1);
//}
//int main() {
// int n = 0;
// scanf_s("%d", &n);
// int ret = 0;
// //ret = Fac1(n);//回圈的方式求得階乘
// ret = Fac2(n);//遞回的方式求階乘
// printf("%d\n ", ret);
// return 0;
//}
//用遞回求第n個斐波那契數列
//int count = 0;
//int Fab(int n) {
// /if (n == 3) {測試斐波那契數列
// count++;
// }/
// if (n <= 2)
// return 1;
// else
// return n = Fab(n - 1) + Fab(n - 2);
//}
//int Fab(int n) {
// int a = 1;
// int b = 1;
// int c = 1;
// while (n > 2) {
// c = a + b;
// a = b;
// b = c;
// n–;
// }
// return c;
//}
//int main() {
// int n = 0;
// scanf_s("%d", &n);
// int ret = 0;
// ret = Fab(n);
// printf("ret=%d\n ", ret);
// return 0;
//}
//棧溢位
void test(int n) {
if (n < 10000) {
test(n + 1);
}
}
int main() {
test(1);
return 0;
}