0
点赞
收藏
分享

微信扫一扫

函数递归经典小练习

扒皮狼 2022-04-04 阅读 74

题目

  • 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;
}

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

加油!!!

举报

相关推荐

0 条评论