Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在if中使用预减量条件调用函数_C - Fatal编程技术网

C 在if中使用预减量条件调用函数

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,然后返回结

请解释一下上述程序。我不明白。输出是什么。是的,先生,我得到了这样的输出4 3 2 1 0 1 2 3它是怎样的,先生

函数
显示
被递归调用,直到它传入的参数等于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语言知之甚少