我有一个简单的学习功能:
#include<stdio.h>
void func1(int i){
if(i == 6) return; // Base Case
printf("%d ", i);
func1(i + 1);
printf("\nEnd1");
}
int main()
{
func1(1); // *
return 0;
}
func1() *没有输入。
我继续收到: 这个输出(!!!?): 1 2 3 4 5 结束1 结束1 结束1 结束1 结束1
终端中没有错误
$ cd "/e/Prog_Lang/Module/" && gcc recur_pnt1_5.c -o recur_pnt1_5.exe && "/e/to Prog_Lang/Module/"recur_pnt1_5.exe
我不知道我能尝试解决什么问题。 有什么想法吗?
我复制了整个代码并执行了它,结果是
1 2 3 4 5
End1
End1
End1
End1
End1
在函数 fun1 中,有一条语句
printf("\nEnd1");
,当 i == 6
时递归结束。因此,每次在递归中调用 fun1 时,\nEnd1
都会打印到终端。
如果您只想在递归结束时打印它,您应该像这样更改您的
fun1
void func1(int i){
if(i == 6)
{
printf("\nEnd1");
return ;
}
printf("%d ", i);
func1(i + 1);
}
您没有获得预期的输出,因为代码使用的逻辑不支持该输出。请注意
func1()
逻辑中的微小变化 - 大括号放置在条件 (i==6)
的代码块周围。此代码块现在包含 End1
语句,因此程序可以按预期提供输出。
更新:根据您的要求指定,
printf(End1)
语句现在放置在递归调用之后之后。
可运行的代码在这里。
#include<stdio.h>
void func1(int i)
{
if(i < 6)
{
printf("%d ", i);
func1(i + 1);
}
else
{
printf("End1\n");
}
}
int main()
{
func1(1);
return 0;
}
输出:
1 2 3 4 5 End1
#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;
}
以下链接打开新网站页面点击有类似的解决方案可以避免使用全局变量吗?