C 我真的不知道';我不明白我们是怎么得到这些结果的
有人能给我解释一下我们是怎么得到这个输出的吗 输出:C 我真的不知道';我不明白我们是怎么得到这些结果的,c,C,有人能给我解释一下我们是怎么得到这个输出的吗 输出: Q B C D Q B C D 这是我的代码: #include <stdio.h> char x = 'A'; void fun_1(int n) { if(n>0) fun_1(n-3); if(n == 0 ) printf("Q\n"); printf("%c ", ++x); }; int main() { fun_1(6); return 0; } #包括
Q
B C D
Q
B C D
这是我的代码:
#include <stdio.h>
char x = 'A';
void fun_1(int n) {
if(n>0) fun_1(n-3);
if(n == 0 ) printf("Q\n");
printf("%c ", ++x);
};
int main()
{
fun_1(6);
return 0;
}
#包括
char x='A';
虚无乐趣1(内部n){
如果(n>0)fun_1(n-3);
如果(n==0)printf(“Q\n”);
printf(“%c”,+x);
};
int main()
{
乐趣1(6);
返回0;
}
伙计们,有人能给我解释一下我们是怎么得到这个结果的吗
我能够复制:
% vi aaaa.c
[ code copied in the editor ]
% gcc aaaa.c
% ./a.out
Q
B C D
我希望这有帮助
(如果不是每个人都清楚的话,那是个笑话……)
您可以尝试在函数fun\u 1
中添加printf。您可以看到,它被递归调用了3次,值为6、3和0
最后一次调用将打印Q,然后打印B。然后第二次调用将打印C,第一次调用将打印D。以下是将要进行的调用:
fun_1(n=6)//from main
fun_1(n=3)//since 6 > 0 {
fun_1(n=0){//now n is not greater than zero, so don't recurse
execute if n == 0, yes it is, so output Q
print ++x, x was A now after ++x, x would be 'B'
}
since n <> 0, don't output Q
print ++x, x was B, so print C which is after pre-incrementing x
}
since n <> 0, don't output Q
print ++x, x was C, so print D which is after pre-incrementing x
}
fun_1(n=6)//来自main
乐趣1(n=3)//因为6>0{
fun_1(n=0){//现在n不大于零,所以不要递归
如果n==0,则执行,是的,因此输出Q
print++x,x在++x之后是A,x将是“B”
}
因为n0,所以不输出Q
print++x,x是B,所以print C是在预加x之后
}
因为n0,所以不输出Q
print++x,x是C,所以print D是在预加x之后
}
您有一个递归函数,递归意味着它在某个点调用
它本身终端情况(当函数停止调用自身时)为n==0
时
在处理递归函数时,必须这样考虑:
递归级别0(第一次调用)
- 递归级别1
- 递归级别2 因此,这是终端情况
main
。如你所见
通过对递归级别的分析,生成的输出是
在main函数中第一次调用此方法时,您将发送6的值
如果(n>0)fun_1(n-3)使用此语句,因为6>0,递归过程开始,6-3=3被发送回fun-1函数。但在这里,最重要的是要记住,在内存中创建的第一个函数并没有终止。对于每个递归步骤,将为新的n值创建新函数。所以在这里
printf(“%c”,+x)
此语句将使用相同数量的递归循环。因为您使用了预增量作为“++x”,所以字符值x='A'将首先递增,然后打印。因此,对于每个递归循环步骤,所有创建的函数都会通过一系列的创建终止,它们会将预先递增的值打印为输出。递归……?或者将所有递归调用都写在纸上,包括它们生成的输出。或者使用调试器逐行遍历代码,逐步执行递归调用。是的,这就是他所说的输出。有什么帮助?
n == 3 ==> if(n>0) fun_1(n-3); is executed
n == 0 ==>
if(n == 0 ) printf("Q\n"); is executed, output is "Q\n"
printf("%c ", ++x); is executed, x is now B, output is B
printf("%c ", ++x); is executed, x is now C, output is C
printf("%c ", ++x); is executed, x is now D, output is D
Q
B C D
void fun_1(int n) {
if(n>0) fun_1(n-3);
if(n == 0 ) printf("Q\n");
printf("%c ", ++x);
};