> 文档中心 > 函数递归经典小练习

函数递归经典小练习


本文将介绍几个经典函数递归题,希望对你有帮助

题目

  • 1.用函数的递归打印每个数
  • 2.打印n的阶乘
  • 3.模拟实现strlen函数
  • 4.将参数字符串中的字符反向排列
  • 5.写一个递归函数DigitSum(n)
  • 6.计算斐波那契数列

1.用函数的递归打印每个数

题目要求:假设输入1234,输出结果1 2 3 4

#includevoid print(int n){if (n >9 ){     print(n/10);//1234,123,12,1}    printf("%d ", n % 10);}int main(){int n;scanf("%d", &n);print(n);}

 

2.打印n的阶乘

n!=1*2*3*...n;分析题目,可以将n的阶乘写成n*(n-1)*(n-2)*...2*1,这样就可以用递归来解题。

#includeint fac(unsigned int n){if (n > 1)return n * fac(n - 1);elsereturn 1;}int main(){unsigned int n;scanf("%d", &n);int ret = fac(n);printf("%d!=%d\n", n, ret);return 0;}

3.模拟实现strlen函数

streln()函数是测量字符串长度的函数,它遇到'\0'会停止。

#includeint my_strlen(char* arr){if (*arr != '\0'){return 1 + my_strlen(arr + 1);}else{return 0;}}int main(){char arr[] = "abcdef";int len = my_strlen(arr);printf("len=%d\n", len);return 0;}

4.将参数字符串中的字符反向排列

编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。

#includevoid 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";int len = strlen(arr);reverse_string(arr,len);printf("%s\n", arr);return 0;}

5.写一个递归函数DigitSum(n)

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
输入:1729,输出:19

#includeint DigitSum(unsigned int n){if (n > 9){return DigitSum(n / 10) + n % 10;}else{return n;}}int main(){unsigned int n;scanf("%d", &n);int ret=DigitSum(n);printf("%d\n", ret);return 0;}

6.计算斐波那契数列

1 1 2 3 5 8......前两个数加起来等于后一个数的数列为斐波那契数列

#includeint fib1(int n){if (n > 2)return fib(n - 1) + fib(n - 2);else{return 1;}}int main(){int n;scanf("%d", &n);int ret=fib1(n);printf("%d\n", ret);int ret = fib2(n);printf("%d\n", ret);return 0;}

总结:本文基本都是代码实现,仅供参考。

加油!!!