函数递归自己写出来难度较大,今天呈现几个有代表性的题目:
1.递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
无递归
void jiecheng(int n) { int i = 0; int ret = 1; for(i = 1;i<=n;i++) { ret = ret * i; } printf("%d", ret); } int main() { int n = 0; scanf("%d", &n); jiecheng(n); return 0; }
有递归
int fac(int n) { if (n <= 1) { return 1; } else { return n * fac(n - 1); } } int main() { int ret = 0; int n = 0; scanf("%d", &n); ret = fac(n); printf("%d", ret); return 0; }
2. 递归和非递归分别实现strlen
无递归
int my_strlen(char* s) { int count = 0; while (*s != '\0') { count++; s++; } return count; } int main() { char arr[] = "qwofghbaohgboahgoihgoher"; int len = my_strlen(arr); printf("%d", len); return 0; }
递归
int my_strlen(char* s) { if (*s == '\0') { return 0; } else { return 1 + my_strlen(s + 1); } } int main() { char arr[] = "erohigrwnger0hbnebheqpbnqei"; int len = my_strlen(arr); printf("%d", len); return 0; }
计算一个数的每位之和(递归实现)
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
输入:1729,输出:19int DigitSum(int n) { if (n <= 9) { return n; } else { return n % 10 + DigitSum(n / 10); } } int main() { int num = 0; scanf("%d", &num); int shu = 0; shu = DigitSum(num); printf("%d", shu); return 0; }
递归实现n的k次方
int cifang(int n,int k) { if(k>0) { return cifang(n,k - 1)*n; } return 1; } int main() { int n = 0; printf("请输入一个数"); scanf("%d", &n); printf("请输入这个数的k次方"); int k = 0; scanf("%d", &k); int num = 0; num = cifang(n,k); printf("%d", num); return 0; }