【发布时间】:2014-08-01 23:33:18
【问题描述】:
我正在学习软件工程,遇到了这个练习:它要求用 C 语言编写一个递归函数,该函数接收一个正整数和一个空字符串,并将数字“翻译”成一个字符串。这意味着在调用该函数之后,我们发送的字符串将包含数字,但作为其数字的字符串。
我写了这个函数,但是当我尝试打印字符串时,它确实打印了我发送的数字,但是是相反的。
这是函数:
void strnum(int n, char *str)
{
if(n)
{
strnum(n/10, str+1);
*str = n%10 + '0';
}
}
例如,我在函数调用时发送了数字 123,输出是 321 而不是 123。
我还尝试在 if 语句中交换两行,但仍然如此。我不知道我做错了什么。有人可以帮忙吗?
注意:练习中不允许使用 while 和 for 循环语句。
【问题讨论】:
-
因为
*str = n%10 + '0';发生在递归调用之后,所以你的数字会倒退。脑补代码执行,你会看到的。 -
@RobertHarvey 我认为在这种情况下,无论递归调用在哪里,它都会反转。第一次调用(即第一级递归)将始终打印 3
-
该函数需要修改,以便在退出所有后续递归后将值放入字符串中,最终递归级别将第一个字符放入字符串中。 IE。 'str' 应该在退出递归之前递增,而不是作为调用下一个递归的一部分。
标签: c string recursion integer