C 在if中使用预减量条件调用函数
请解释一下上述程序。我不明白。输出是什么。是的,先生,我得到了这样的输出4 3 2 1 0 1 2 3它是怎样的,先生函数C 在if中使用预减量条件调用函数,c,C,请解释一下上述程序。我不明白。输出是什么。是的,先生,我得到了这样的输出4 3 2 1 0 1 2 3它是怎样的,先生函数显示被递归调用,直到它传入的参数等于1为止。函数调用将在最后一次递归调用的末尾打印出1和0 该函数的前提是传入一个大于等于1的正值 --a表示将值减少1,然后返回结果。因此,它只会在以下情况下递归调用!=1.递归调用函数display,直到其传入参数等于1。函数调用将在最后一次递归调用的末尾打印出1和0 该函数的前提是传入一个大于等于1的正值 --a表示将值减少1,然后返回结
显示
被递归调用,直到它传入的参数等于1为止。函数调用将在最后一次递归调用的末尾打印出1和0
该函数的前提是传入一个大于等于1的正值
--a
表示将值减少1,然后返回结果。因此,它只会在以下情况下递归调用!=1.递归调用函数display
,直到其传入参数等于1。函数调用将在最后一次递归调用的末尾打印出1和0
该函数的前提是传入一个大于等于1的正值
--a
表示将值减少1,然后返回结果。因此,它只会在以下情况下递归调用!=1.你没有详细说明你不了解的内容。希望这有助于:
void display(int a)
{
printf("\n%d",a);
if(--a)
display(a);
printf("\n%d",a);
}
main()
{
display(4);
}
你没有给出太多你不了解的细节。希望这有助于:
void display(int a)
{
printf("\n%d",a);
if(--a)
display(a);
printf("\n%d",a);
}
main()
{
display(4);
}
在伪代码中:
// Declare Display function
void display(int a)
{
// Print the value of a (passed in)
printf("\n%d",a);
// Reduce a by 1. If the result is non-zero then recursively call the function with the value of a
if(--a)
display(a);
//Print the value of a again
printf("\n%d",a);
}
main()
{
// Start with 4
display(4);
}
在伪代码中:
// Declare Display function
void display(int a)
{
// Print the value of a (passed in)
printf("\n%d",a);
// Reduce a by 1. If the result is non-zero then recursively call the function with the value of a
if(--a)
display(a);
//Print the value of a again
printf("\n%d",a);
}
main()
{
// Start with 4
display(4);
}
函数打印从a到零的所有数字,然后按递增顺序打印所有数字,直到达到a-1。 产出将是: 4
3
2
1
0
1
2
3该函数打印a和a之间的所有数字,直到数字为零,然后按递增顺序打印所有数字,直到数字为a-1。 产出将是: 4
3
2
1
0
1
2
3理解这样的示例最简单的方法可能是编译它,然后在调试器中单步执行。观察堆栈并观察值是如何变化的。理解此类示例最简单的方法可能是编译它,然后在调试器中单步执行。观察堆栈并观察a的值是如何变化的。重要的是了解如何评估条件:
如果(--a)
表示:将a减小一,然后检查其值
如果(a--)
表示检查a的值,然后将其减小一
因此,在第一种情况下,是否在块中运行代码的决定是在变量减少后完成的。另一方面,第二种情况首先对变量求值,然后减小它(然后运行if语句中的代码,具体取决于求值结果)重要的是了解如何对条件求值:
如果(--a)
表示:将a减小一,然后检查其值
如果(a--)
表示检查a的值,然后将其减小一
因此,在第一种情况下,是否在块中运行代码的决定是在变量减少后完成的。另一方面,第二种情况首先对变量求值,然后减小它(然后运行if语句中的代码,这取决于求值的结果)- 显示(4):打印“4”,呼叫显示(3),打印“3”
- 显示(3):打印“3”,呼叫显示(2),打印“2”
- 显示(2):打印“2”,呼叫显示(1),打印“1”
- 显示(1):打印“1”,不要调用显示(0),打印“0”
- 结果是:43210123
- 显示(4):打印“4”,呼叫显示(3),打印“3”
- 显示(3):打印“3”,呼叫显示(2),打印“2”
- 显示(2):打印“2”,呼叫显示(1),打印“1”
- 显示(1):打印“1”,不要调用显示(0),打印“0”
- 结果是:43210123
display(a):
print a
decrement a
if a > 0, call display (a)
print a
main
display (4)
因此,结果将是:43210123循环如下:
display(a):
print a
decrement a
if a > 0, call display (a)
print a
main
display (4)
因此结果将是:4 3 2 1 0 1 2 3你应该解释你做了什么和/或不理解什么。另外,请正确输入可能有帮助的代码。顺便说一句,如果使用负值调用此方法,将产生堆栈溢出。那么,这是家庭作业还是工作面试?您应该解释您所做和/或未理解的事情。另外,请正确输入可能有帮助的代码。顺便说一句,如果使用负值调用此方法,将产生堆栈溢出。那么,这是家庭作业还是工作面试?调用显示(4)基本上将打印4和3。在这两个值之间,将调用display(3)(因为“if(--a){…}”相当于“a=a-1;if(a>0){…}”)。Display(3)将打印3和2调用Display(2在两者之间)。因此您有:4[Display(3)]3;=>4[3[Display(2)]2]3;=>4[3[2[Display(1)]1]2]3=>4[3[2[1]这里a的值将为0;Display(0)将不被调用,因此递归停止]0]1]2]3调用Display(4)将基本上打印4和3。在这两个值之间,将调用Display(3)(因为“if(-a){…}”相当于“a=a-1;if(a>0){…}”)。Display(3)将打印3和2调用Display(2)。因此您有:4[Display(3)]3;=>4[3[Display(2)]2]3;=>4[3[2[Display(1)]2]3=>4[3[2[1]这里a的值将为0;Display(0)将不被调用,因此递归停止]0]1]2]3.为什么这样问呢?我对c语言知之甚少