#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义一个全局变量
char g_buf[1000];
//第一种做法,普通做法
int inverse(char *str){
if(str == NULL){
return -1;
}
int length = strlen(str);
char *p1 = str;
char *p2 = str + length-1;
while(p1<p2){
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
}
//通过递归的方式,逆序打印
//递归和全局变量,把逆序的结果放到全局变量
//递归和非全局变量(递归指针做函数参数)
//第二种方法,递归加上堆栈
//通过递归的方式,逆序打印
void inverse02(char *p){
if(p==NULL){
return ;
} //递归结束的异常条件
if(*p=='\0'){
return ;
}//递归结束的条件
inverse02(p+1);//注意,此时没有执行输出,而是执行了 让字符串的每一个地址入栈
printf("%c",*p);
}
//递归和全局变量,把逆序的结果放到全局变量
void inverse03(char *p){
if(p==NULL){
return ;
} //递归结束的异常条件
if(*p=='\0'){
return ;
}//递归结束的条件
inverse03(p+1);//注意,此时没有执行输出,而是执行了 让字符串的每一个地址入栈
//printf("%c",*p);
//strcat(g_buf,p);
//strncpy(g_buf,p,1);//每次都只拷贝一个,拷到同一个地方
strncat(g_buf,p,1);//追加,不覆盖
}
//递归和非全局变量(递归指针做函数参数)
void inverse04(char *p,char *mbuf){
if(p==NULL||mbuf == NULL){
return ;
} //递归结束的异常条件
if(*p=='\0'){
return ;
}//递归结束的条件
inverse04(p+1,mbuf);//注意,此时没有执行输出,而是执行了 让字符串的每一个地址入栈
//printf("%c",*p);
//strcat(g_buf,p);
//strncpy(g_buf,p,1);//每次都只拷贝一个,拷到同一个地方
strncat(mbuf,p,1);//追加,不覆盖
}
void main(){
char buf[] = "abcdefg";
//inverse02(buf);
//printf("%s",buf);
//memset(g_buf,0,sizeof(g_buf));//设置空串
char mbuf[1024]={0};
inverse04(buf,mbuf);
printf("g_buf:%s\n",mbuf);
system("pause");
}
递归的一些逐步理解
最新推荐文章于 2024-08-26 23:50:52 发布