本文将介绍几个经典函数递归题,希望对你有帮助
题目
- 1.用函数的递归打印每个数
- 2.打印n的阶乘
- 3.模拟实现strlen函数
- 4.将参数字符串中的字符反向排列
- 5.写一个递归函数DigitSum(n)
- 6.计算斐波那契数列
1.用函数的递归打印每个数
题目要求:假设输入1234,输出结果1 2 3 4
#include<stdio.h>
void 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,这样就可以用递归来解题。
#include<stdio.h>
int fac(unsigned int n)
{
if (n > 1)
return n * fac(n - 1);
else
return 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'会停止。
#include<stdio.h>
int 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函数库中的字符串操作函数。
#include<stdio.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";
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
#include<stdio.h>
int 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......前两个数加起来等于后一个数的数列为斐波那契数列
#include<stdio.h>
int 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;
}
总结:本文基本都是代码实现,仅供参考。
加油!!!