我知道当函数调用它时,它被称为递归。但是当函数A调用函数B调用A直到有一个IF语句停止整个过程时,你如何调用。从一本C书看这个练习(顺便说一下,我可以更好地解决这个问题吗?)
编写一个显示四个编号选项和菜单的功能 要求你选择一个。 (输出应如前所示。)
编写一个有两个int参数的函数:一个下限和一个 上限。该函数应从输入读取整数。如果 整数超出限制,该函数应再次打印菜单 (使用这个问题的“a”部分的功能)来重新谴责 用户然后获得一个新值。当一个适当限制的整数是 输入后,该函数应将该值返回给调用 功能
使用“a”和“b”部分的函数编写一个最小程序 这个问题。通过最小化,我们的意思是它不需要实际执行 菜单承诺的行动;它应该只显示选择并得到 一个有效的回应。
#include <stdio.h>
void Display(void);
int Limits(int a, int b);
int main(void)
{
Display();
return 0;
}
void Display()
{
int y = 0;
printf("1 - 2 - 3 - 4\n");
y = Limits(0, 100);
if(y < 100 && y > 0)
printf("%d\n", y);
}
int Limits(int a, int b)
{
int x;
scanf("%d", &x);
if(x < a || x > b)
Display();
return x;
}
输出:
1 - 2 - 3 - 4
1234
1 - 2 - 3 - 4
34456
1 - 2 - 3 - 4
123
1 - 2 - 3 - 4
-34
1 - 2 - 3 - 4
-23
1 - 2 - 3 - 4
88
88
Press [Enter] to close the terminal ...
答案 0 :(得分:2)
这称为相互递归或(较不常见)交叉递归。
至于如何干净利落地解决它,听起来像它大致适合像这样的模式:
namespace {
int show_menu() {
printf("1 - 2 - 3 - 4");
int n;
std::cin >> n;
return n;
}
}
int menu() {
int value;
do {
value = show_menu();
} while (value <1 || value > 4);
return value;
}