C/C++递归|求字符串长度

关于递归

递归是一种可以大化小且有规律重复执行步骤的一种函数写法,在不考虑栈溢出的情况下,使用递归法的写法是非常不错的一种选择。递归的优点是在栈不考虑溢出的情况下是十分容易理解与运用。而缺点也很明显,空间复杂度大,有数据冗语,还有会导致栈溢出。

说明

在求字符串长度的时候需要使用strlen()函数,所以需要引用 #include<string.h>头函数

接着,创建了一个用于存放字符串的数组

	char arr[] = "abc";

 在创建函数的时候使用指针变量来存放数组的首地址,定义的字符串类结尾有隐藏的'\0',因此,当指针在递增的时候读到'\0'时就结束循环。

int my_strlen_two(char* str)
{
	if (*str != '\0')
}

因为在函数进行递归的时候是在不断调用自身函数,所以在调用下一次自身函数的时候需要把本次结果加上递归出来的结果,才能得到准确的结果。

第一个1+是因为本次结果为真,所以要加1。

第二个+1是因为需要指针指向数组的下一位。

int my_strlen_two(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen_two(str + 1);
	else
		return 0;
}

代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

//非递归
int my_strlen_one(char* str)
{
	int count = 0;
	while (*str!= '\0') {
		count++;
		str++;
	}
	return count;
}

//递归法
int my_strlen_two(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen_two(str + 1);
	else
		return 0;
}

int main()
{
	char arr[] = "abc";
	int len1 = my_strlen_one(arr);
	int len2 = my_strlen_two(arr);
	printf("非递归法:%d\n", len1);
	printf("递归法:%d\n", len2);
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值