C语言 使用递归反向打印字符串

dwbf0jvd  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(134)

我用一个循环反向打印了一个字符串,这很简单,但是我想到了优化我的代码,使它更简洁更短。所以,在我研究了最好的方法之后,我发现了这个递归的东西,它是循环/迭代的完美替代品。我是个新手,但是我仍然了解它的一些方面。我在github上找到了一个适合我的任务的代码,但是我不理解它。下面是代码:

#include "main.h"

/**
 * _print_rev_recursion - prints string in reverse
 * @s: pointer to the string
 * Return: void
 */

void _print_rev_recursion(char *s)
{
if (*s > '\0')
{
    _print_rev_recursion(s + 1);
    _putchar(*s);
}

}

上面的代码反向打印一个字符串,_putchar是putchar的一个定制副本(基本上做同样的事情)。我请求的是代码如何工作的解释。谢谢!

g52tjvyc

g52tjvyc1#

对于初学者来说,函数至少应该声明为

void _print_rev_recursion( const char *s);

因为传递的字符串在函数中没有改变。
if语句应该如下所示

if (*s != '\0')

此代码片段

if (*s > '\0')
{
    _print_rev_recursion(s + 1);
    _putchar(*s);
}

表示函数调用自身,直到遇到字符串的结尾。

_print_rev_recursion(s + 1);

表达式s + 1遍历字符串直到其结尾。
那么这句话

_putchar(*s);

在每个函数调用中,以相反的顺序从字符串末尾开始输出当前符号。
例如,如果传递的字符串是"Hello",则函数将逐步调用自身,如下所示

"Hello" - the first call
"ello" - the second call due to s + 1
"llo"  - the third call again due to s + 1 and so on
"lo"
"o"

和从函数的内部递归调用返回的每个字符中以相反顺序输出的字符。

'o'
'l'
'l'
'e'
'H'

相关问题