关于递归
递归是一种可以大化小且有规律重复执行步骤的一种函数写法,在不考虑栈溢出的情况下,使用递归法的写法是非常不错的一种选择。递归的优点是在栈不考虑溢出的情况下是十分容易理解与运用。而缺点也很明显,空间复杂度大,有数据冗语,还有会导致栈溢出。
说明
在求字符串长度的时候需要使用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;
}