c - 在这种情况下首选递归吗?
问题描述
假设我们有一个字符串,我们想以相反的顺序打印它。在这种情况下,递归似乎是更快的选择,因为字符串被“遍历”一次,而通常的循环方法会执行两次。
对于这类问题,有什么理由不喜欢递归吗?在大输入的情况下,递归是否会带来某种不利影响?
考虑以下代码:
#include <stdio.h>
#include <string.h>
void printReverse_1(const char *str)
{
if (!*str)
return;
printReverse_1(str + 1);
putchar(*str);
}
void printReverse_2(const char *str)
{
const char *tmp = str + strlen(str) - 1;
while (tmp > str)
{
putchar(*tmp--);
}
putchar(*tmp);
}
int main(void)
{
printReverse_1("abc");
putchar('\n');
printReverse_2("abc");
putchar('\n');
return 0;
}
解决方案
在这类问题中是否有任何理由不喜欢递归?在大输入的情况下,递归是否会带来某种不利影响?
递归为每个函数调用创建一个新的堆栈帧。对于大型输入,它可能会耗尽堆栈空间。如果可能的话,更喜欢迭代而不是递归。
推荐阅读
- json - 在 Google 表格中获取 JSON 结果
- reporting-services - SSRS:根据用户输入的(日期)参数值运行查询的变量?
- typescript - 在ionic html页面中显示分钟和秒数
- angular - 我正在尝试程序它显示错误
- visual-studio-code - 如何绕过 Windows 1903 中已验证的错误并启动 VSCode 集成终端?
- c# - .NET Core 2.2 插件框架和程序集重定向
- lisp - 如何计算不同字符的出现并将它们全部作为表格返回
- c# - 安装 Zulu 后出现“ORA-01017:用户名/密码无效;登录被拒绝”异常
- python-3.x - Python 3.7 发生 Selenium Web Driver 元素不可交互错误
- ansible - Ansible:增量追加到列表变量