- 递归实现n的k次方
#include <stdio.h> double Power(int n, int k) { if (k == 0) { return 1; } if (k < 0) { return 1.0 / Power(n, -k); } if (k > 0) { return n * Power(n, k - 1); } } int main() { int n = 0, k = 0; scanf("%d %d", &n,&k); printf("%lf\n", Power(n, k)); return 0; }
- 计算一个数的每位之和(递归实现)
#include <stdio.h> DigitSum(int n) { if (n > 9) { return DigitSum(n / 10) + n % 10; } return n; } int main() { int n = 0; scanf("%d", &n); printf("%d\n", DigitSum(n)); return 0; }
- 递归方式实现打印一个整数的每一位
#include <stdio.h> void Print(int n) { if (n > 9) { Print(n / 10); } printf("%d ", n%10); } int main() { int n = 0; scanf("%d", &n); Print(n); return 0; }
- strlen的模拟(递归实现)
#include <stdio.h> int my_strlen(char* str) { if (*str == '\0') { return 0; } return 1 + my_strlen(str + 1); } int main() { char arr[] = "ft666"; printf("%d\n", my_strlen(arr)); return 0; }
- 计算斐波那契数,递归和非递归分别实现求第n个斐波那契数
//非递归写法 #include <stdio.h> fib(int n) { int a = 1, b = 1,c=0; if (n == 1 || n == 2) { return 1; } while (n > 2) { c = a + b; a = b; b = c; n--; } return c; } int main() { int n = 0; scanf("%d", &n); printf("%d\n", fib(n)); return 0; } //递归写法 fib(int n) { if (n == 1) { return 1; } else if(n == 2) { return 1; } else { return fib(n - 1) + fib(n - 2); } } int main() { int n = 0; scanf("%d", &n); printf("%d\n", fib(n)); return 0; }
- 求阶乘,递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
//非递归写法 #include <stdio.h> factorial(int n) { int i = 0, ret = 1; for (i = 1; i <= n; i++) { ret *= i; } return ret; } int main() { int n = 0; scanf("%d", &n); printf("%d\n", factorial(n)); return 0; } //递归写法 #include <stdio.h> int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int main() { int n = 0; scanf("%d", &n); printf("%d\n", factorial(n)); return 0; }
- 字符串逆序(递归实现),
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
//递归写法 #include <stdio.h> #include <string.h> void reverse_string(char* str) { int len = strlen(str); char tmp = *str; *str = *(str + len-1); *(str + len - 1) = '\0'; if (strlen(str+1) >= 2) { reverse_string(str + 1); } *(str + len - 1) = tmp; } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s\n", arr); return 0; } //非递归写法 #include <stdio.h> #include <string.h> void reverse_string(char* str) { int left = 0; int right = strlen(str)-1; while (left <= right) { char tmp = *(str+left); *(str+left)=*(str+right); *(str + right)=tmp; left++; right--; } } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s\n", arr); return 0; }