1.递归 函数内部自己调用自己 2.斐波那契数说明 1 1 2 3 5 8 13 21 34 55 从第三个数字开始,每一个数字都等于前两位的和
/*1.递归和非递归分别实现求第n个斐波那契数。*/ //递归方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int di_gui(int n) { if (n <= 2) { return 1; } else { return di_gui(n - 1) + di_gui(n - 2); } } int main() { printf("请输入你要求哪一位斐波那契数\n"); int num = 0; scanf("%d", &num); printf("第%d个斐波那契数为%d\n",num,di_gui(num)); system("pause"); return 0; } // 1 1 2 3 5 8 13 21 34 //函数方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int di_gui(const int n) { int a[100] = { 0 }; int i = 0; a[0] = 1; a[1] = 1; for (i = 3; i <= n; i++) { a[i - 1] = a[i - 2] + a[i - 3]; } return a[n - 1]; } int main() { printf("请输入你要求哪一位斐波那契数\n"); int num = 0; scanf("%d", &num); printf("第%d个斐波那契数为%d\n",num,di_gui(num)); system("pause"); return 0; } /*2.编写一个函数实现n^k,使用递归实现 */ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int ci_fang(int n, int k) { if (k == 1) { return n; } else { return ci_fang(n, k - 1)*n; } } int main() { int n = 0, k = 0; printf("请输入你想要求的n^k中的n,k\n"); scanf("%d %d", &n, &k); printf("所求值为:%d\n", ci_fang(n, k)); system("pause"); return 0; } /*3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 */ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int DigitSum(int num) { if (num/10 == 0) { return num; } else { return (DigitSum(num / 10) + num % 10); } } int main() { printf("请输入一个非负整数:\n"); int n = 0; scanf("%d",&n); printf("%d",n); printf("该整数的各位和为%d\n", DigitSum(n)); system("pause"); return 0; } /*4. 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中 的字符串操作函数。 */ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> char* reverse_string(char * string) { char *top = string; char *end = string; while (*end) { end++; } end--; while (top < end) { int tmp = *top; *top = *end; *end = tmp; top++; end--; } return string; } int main() { printf("输入字符串\n"); char a[] = "0"; scanf("%s", a); printf("反向排列后的字符串为:%s\n",reverse_string(a)); system("pause"); return 0; } /*5.递归和非递归分别实现strlen ,计算字符串长度*/ //函数方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int my_strlen(char * string) { char * start = string; int count = 0; while (*(start++)) { count++; } return count; } int main() { printf("输入你想计算长度的字符\n"); char num[] = "0"; scanf("%s", num); printf("该字符串的长度为%d\n", my_strlen(num)); system("pause"); return 0; } //递归方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int my_strlen(char *string) { char* start = string; if (!(*(start+1))) { return 1; } else { return my_strlen(string+1) + 1; } } int main() { printf("输入你想计算长度的字符\n"); char num[] = "0"; scanf("%s",num); printf("该字符串的长度为%d\n",my_strlen(num)); system("pause"); return 0; } /*6.递归和非递归分别实现求n的阶乘*/ //函数方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int jie_cheng(int n) { int i = 0,ret = 1; for (i = 1; i <= n; i++) { ret *= i; } return ret; } int main() { printf("请输入一个正整数\n"); int num = 0; scanf("%d", &num); printf("%d的阶乘为%d\n", num, jie_cheng(num)); system("pause"); return 0; } //递归方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int jie_cheng(int n) { if (n == 1) return n; else return jie_cheng(n - 1)*n; } int main() { printf("请输入一个正整数\n"); int num = 0; scanf("%d", &num); printf("%d的阶乘为%d\n", num, jie_cheng(num)); system("pause"); return 0; } /*7.递归方式实现打印一个整数的每一位 */ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int da_yin(int num) { if (num / 10 == 0) { printf("%d ", num); return 0; } else { da_yin(num / 10); printf("%d ", num % 10); } } int main() { printf("请输入一个整数\n"); int n = 0; scanf("%d", &n); printf("整数%d依次打印的结果是\n",n); da_yin(n); system("pause"); return 0; }