注册 登录
编程论坛 C++教室

解释一个逆序输出问题

宇智波曌 发布于 2011-06-09 17:21, 477 次点击
程序代码:
#include <stdio.h>

void fun(char str[], int i)
{
  if(str[i] != '\0')
    {
      fun(str, i+1);
      printf("%c", str[i]);
    }
}
int main()
{
  char str[81];
  printf("input the string :\n");
  scanf("%s",str);
  fun(str, 0);
  printf("\n");

  return 0;
}
调用函数怎么在调用,懂的请解释一下
6 回复
#2
lintaoyn2011-06-09 18:02
void fun(char str[], int i)
{
    if(str[i] == '\0')
        return;
    fun(str, i+1);
    printf("%c", str[i]);
}这样子看
调用一个函数相当于把程序的控制权转交给该函数,只有在这个函数结束后控制权才会返回.先这么理解吧
#3
lz10919149992011-06-09 21:14
回复 楼主 宇智波曌
这个递归很简单啊,出口就是'\0',回溯时就从尾到头输出。
#4
a3733392052011-06-09 22:12
只有本站会员才能查看附件,请 登录

给看图,在最后一次调用一次执行完之后,这个函数会继续执行上一次没有执行完的函数,这个图其实是包容的关系,一个函数里包涵一个跟自己一样的函数,但是都必须要执行完的,你可以画个图,会更明白

[ 本帖最后由 a373339205 于 2011-6-9 22:14 编辑 ]
#5
ljt2011-06-09 22:54
递归,不知道你就把那个81改成3,自己跟踪一遍就差不多了
#6
我是菜鸟C2011-06-10 21:55
   一层一层的嵌套,从里到外执行。
   i+n最后一个是最里层,故先输出它。
   不知道对不对。。。
#7
宇智波曌2011-06-11 19:35
回复 4楼 a373339205
嗯,有图更明白
1