【发布时间】:2020-04-04 04:47:55
【问题描述】:
我需要编写一个递归函数,如果整数的数字是升序(从左到右),则返回 1,如果降序则返回 -1,否则返回 0。
我的解决方案尝试每次都返回 0,我知道原因,但我不知道如何解决。
这是我的代码:
#include <stdio.h>
int check_order(int n)
{
if (n % 10 > n / 10 % 10)
{
return check_order(n / 10);
if (n == 0)
{
return 1;
}
}
else if (n % 10 < n / 10 % 10)
{
return check_order(n / 10);
if (n == 0)
{
return -1;
}
}
else
{
return 0;
}
}
int main()
{
int n;
printf("enter a whole number (n > 9):");
scanf_s("%d", &n);
printf("function returned: %d\n", check_order(n));
}
【问题讨论】:
-
return check_order(n / 10); if (n == 0)。这显然是个问题。return之后的任何代码都不会被执行。 -
请注意,
if (n == 0) { return 1; }后面的代码return check_order(n / 10);根本不会被执行。 -
建议你在调试器中运行你的程序并逐行逐行查看它在做什么。从最简单的
10输入开始。 -
在函数的第一行添加
printf("n%%10=%d n/10%%10=%d\n", n%10, n/10%10);,紧跟在{之后。您可能会发现结果很有趣。 -
你在错误的地方很少有回报。如果 n ≤ 9,你期望什么结果?