C 在 While 循环上无限循环

C Infinite Loop On While Loop

 #include <stdio.h>
    
 void add(int num){
     while(num < 6){
         add(num+1);
     }
    printf("\n%d",num);
 }

void main(){
    int a = 1;
    add(a);
}

谁能解释一下为什么它会变成 Infinite

6 6 6 6....

不仅如此

6

单次。

您不要在循环内更改 num 变量,请尝试以下操作:

   #include <stdio.h>
        
     void add(int num){
         while(num < 6){
             num++;
             add(num);
         }
        printf("\n%d",num);
     }
    
    void main(){
        int a = 1;
        add(a);
    }

And not only

6 single time.

事实上,由于递归调用,即使使用无限循环,它也永远不会只有一次。

要只获得一次,您可以这样做:

 void add(int num){
     while(num < 6){
         num++;
     }
    printf("\n%d",num);
 }

 void add(int num){
     if(num < 6){
        add(num+1);
     }
    if(num == 6)
      printf("\n%d",num);
 }

但不是两者结合。

在你的循环中:

 while(num < 6){
     add(num+1);
 }

您永远不会修改 num。所以循环永远不会退出。您最终通过递归调用 add(5) 结束。这调用 add(6) 打印值 6 和 returns。然后先前的递归调用由于循环再次调用 add(6),依此类推。

假设你有一个递归函数,你不想在这里有一个循环。这应该只是一个 if 语句:

 void add(int num){
     if(num < 6){
         add(num+1);
     }
    printf("\n%d",num);
 }

这将打印从 6 倒数到(在本例中)1 的值。