gpt4 book ai didi

c - 解释所需的 C 递归

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:57 24 4
gpt4 key购买 nike

我需要一些有关此特定代码的帮助。我真的没有完全理解它。有人可以花时间向我解释一下吗?它所做的是获取一个词并打印出它的反面。不过我不明白递归部分,对于 n=1 for 循环只会运行一次,递归会一直运行直到它读取整个单词并遇到 ' ' 标记,但是它如何打印出反向词?

 void reverse()
{
char c;
scanf("%c", &c);
if (c!=' ')
{
reverse();
}
printf("%c", c);
}


int main()
{
int n, i;
printf("\nThe number of the words=");
scanf("%d", &n);

for(i=1; i<=n; ++i)
{
reverse();
printf("\n");
}

printf("\nEnd of the program.\n");
return 0;
}

最佳答案

注意您的示例在底部,首先是您的标题问题:Explaining needed C recursion

递归 是一种允许操作调用自身的编程技术。
一个简单(但无意义)的例子是:

void call(void);
int main(void)
{
call();
}

void call(void)
{
call();
}

注意:这只会一直持续到堆栈确定堆积了太多的调用,并导致程序崩溃。

一个更有意义的例子(为了说明)是写一个回文字符系列(A - Z):

void Palindrome(char a)
{
char b[2];
sprintf(b, "%c", a);
printf(b);
if((a >= 65)&&(a < 90))
{
Palindrome(a+1);
}
sprintf(b, "%c", a);
printf(b);
}

最后一个例子实际上做了两件第一个例子没有做的重要事情:
1) 有一个受控的退出标准if((a >= 65)&&(a <= 90))
2) 将先前调用的结果用于后续调用。

在您的示例中:该程序工作的原因是每次操作调用自身时,它都更深地嵌套(每次调用一个嵌套)到该部分:(这对所有递归程序都是如此)

  {
reverse();
}

在概念上类似于:

{
//do something
{
//do something
{
//do something
//... and so on for as many recursions are necessary to meet exit criteria
}
}
}

“...但是它如何打印出颠倒的单词?”
只有在递归达到编程限制后,执行才会向下流过结束 } 并到达下一个部分,在那里它继续展开自身,每次访问时,以相反的顺序访问堆栈, c 的值,直到每个嵌套级别都已展开:

     }  //after exit criteria is met, execution flow goes from here....
printf("%c", c); //prints values of c in reverse order.
} //to here until number of recursions is exhausted.

那时,如果你逐步使用调试器,你会看到流程从上层 } 到下层 } 执行 printf()每次。

关于c - 解释所需的 C 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com