函数递归经典小练习

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

题目

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

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

加油!!!

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌浩克 .

感谢您对浩克的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值