由一个翻转字符串程序看递归

大伙都知道递归就是一个函数自己调用自己,可是对于递归的过程我总是很迷惑。今天正好看到一个程序,就拿来仔细分析分析。

#include<stdio.h>
void reverse(const char *const sptr)//将字符串反着输出 
{
	if(sptr[0]=='\0'){
		return; 
	} 
	else{
		reverse(&sptr[1]); 
		putchar(sptr[0]);
	} 	
}

int main(void)
{
	char s[50];
	printf("输入字符串\n");
	gets(s);
	printf("相反顺序输出:\n") ;
	reverse(s); 
}
这是一个让我们输入字符串,再对字符串翻转输出的程序。

函数reverse()用递归编写。我们知道字符串的最后一个字符为空字符‘\0’,所以递归的结束条件为==‘\0’。

假设我们输入了字符串abc,这时候'\0'会被加在数组的末尾,即为abc\0。

调用reverse()函数,先进入if判断,a!=’\0‘,故执行reverse(&sptr[1]),这相当于把原来数组abc\0的子数组bc\0赋给reverse函数。接着把a\0赋给reverse,最后\0==\0,就return。
















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值