[问题]请帮忙解释一下这个C递归程序,太菜(已解决)

软件和网站开发以及相关技术探讨
回复
头像
HuaChong
帖子: 493
注册时间: 2006-09-12 17:10

[问题]请帮忙解释一下这个C递归程序,太菜(已解决)

#1

帖子 HuaChong » 2008-09-01 21:44

代码: 全选

#include	<stdio.h>
void reverse(char *string){
	if(*string){
		reverse(string+1);
		putchar(*string);
	}
}

int main ( int argc, char *argv[] )
{
	reverse("abcde");
	return 0;
}	
对递归实现的部份摸不着头脑,请高手解答一哈子,先谢谢了!
上次由 HuaChong 在 2009-01-18 14:33,总共编辑 1 次。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: [问题]请帮忙解释一下这个C递归程序,太菜

#2

帖子 poet » 2008-09-01 21:49

HuaChong 写了:

代码: 全选

#include	<stdio.h>
void reverse(char *string){
	if(*string){
		reverse(string+1);
		putchar(*string);
	}
}

int main ( int argc, char *argv[] )
{
	reverse("abcde");
	return 0;
}	
对递归实现的部份摸不着头脑,请高手解答一哈子,先谢谢了!
自己单步执行一次就懂了。

如果从来没有用过linux下的调试工具,可以试试 kdbg,全图形界面,挺简单的。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#3

帖子 BigSnake.NET » 2008-09-01 21:53

void reverse(char *string){
if(*string){ #非空串
reverse(string+1); #输出首字符之后部分的翻转
putchar(*string); #输出首字符(翻转后变成最后字符)
}
# 空串的话什么都不做
}
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
HuaChong
帖子: 493
注册时间: 2006-09-12 17:10

#4

帖子 HuaChong » 2008-09-01 23:41

BigSnake.NET 写了:#输出首字符(翻转后变成最后字符)
这句话关键!
singyea
帖子: 8
注册时间: 2008-09-01 17:08

#5

帖子 singyea » 2008-09-07 11:08

反序输出。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

#6

帖子 自由建客 » 2008-09-07 20:52

singyea 写了:反序输出。
嗯,没错。记住递归是递推的方向相反就得了。
wanzihrg
帖子: 223
注册时间: 2008-03-15 10:34

#7

帖子 wanzihrg » 2008-09-17 1:26

在windows下的turbo c(因为我觉得它的单步很可视化..)或自己在纸上把它单步一遍就懂递归了
that1101
帖子: 3
注册时间: 2008-08-27 17:31

Re: [问题]请帮忙解释一下这个C递归程序,太菜

#8

帖子 that1101 » 2008-10-17 10:35

void reverse(char *string){
if(*string){//检查当前字符是不是\0,递归调用时,相当于遍历到字符串的结尾
reverse(string+1);//递归调用,直到遍历到字符串的尾部,if(*string)不成立时,结束递归。
putchar(*string);//上次调用reverse()返回后,执行该函数
}
}//任何递归调用都必须有结束条件,否则就变成死循环了,最后会被操作系统强行关闭
头像
guiwen1158
帖子: 1078
注册时间: 2008-05-11 11:10
来自: 深圳
联系:

Re: [问题]请帮忙解释一下这个C递归程序,太菜

#9

帖子 guiwen1158 » 2008-10-17 11:02

:em06
回复