我必须在使用递归的 C 函数中打印一次。
问题是在func1的末尾打印End1(1次且不超过1次): 为此,我创建了 fend1(),并为其配备了全局变量
以下代码是我的实际解决方案,但我希望达到相同的目标, 不使用任何全局变量。
#include<stdio.h>
int cntg1 = 1;
int fend1(){
if(cntg1 < 2){
printf("\nEnd1");
cntg1++;
}
return 0;
}
void func1(int i){
if(i == 6) return; // Base Case
printf("%d ", i);
func1(i + 1);
fend1(); // <<< this is factory new
}
int main()
{
func1(1); // *
return 0;
}
以下链接打开新网站页面点击这里↗🌐查看代码运行情况。
正如我所预料的,我希望得到相同的目标(递归后打印1次), 不使用任何全局变量。
我之前问过类似的问题(↗🌐这里可以找到另一个问题),根据上面的问题得到最高分,但我必须找到更好的解决方案。
您可以修改
func1
以返回一个标志,指示End1消息是否已被打印。尝试某事。像这样:
#include <stdio.h>
int func1(int i) {
// Base Case
if (i == 6) {
return 0;
}
printf("%d ", i);
int printed_end1 = func1(i + 1);
// Print "End1" only if it hasn't been printed yet
if (printed_end1 == 0) {
printf("\nEnd1");
return 1;
}
return printed_end1;
}
int main() {
func1(1);
return 0;
}
您有一个基本案例。就用它吧
void func1(int i){
if(i == 6)
{
printf("\nEnd1");
return; // Base Case
}
printf("%d ", i);
func1(i + 1);
// fend1(); // <<< this is factory new
}
请注意,当参数大于 6 时,该函数将具有未指定的行为。