我用一个循环反向打印了一个字符串,这很简单,但是我想到了优化我的代码,使它更简洁更短。所以,在我研究了最好的方法之后,我发现了这个递归的东西,它是循环/迭代的完美替代品。我是个新手,但是我仍然了解它的一些方面。我在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的一个定制副本(基本上做同样的事情)。我请求的是代码如何工作的解释。谢谢!
1条答案
按热度按时间g52tjvyc1#
对于初学者来说,函数至少应该声明为
因为传递的字符串在函数中没有改变。
if语句应该如下所示
此代码片段
表示函数调用自身,直到遇到字符串的结尾。
表达式
s + 1
遍历字符串直到其结尾。那么这句话
在每个函数调用中,以相反的顺序从字符串末尾开始输出当前符号。
例如,如果传递的字符串是
"Hello"
,则函数将逐步调用自身,如下所示和从函数的内部递归调用返回的每个字符中以相反顺序输出的字符。