递归如何在这段代码中起作用?

时间:2012-09-06 12:20:54

标签: c function recursion stack

  

可能重复:
  What is really happening in this code?

在这个问题上我不能应用我的递归概念

#include<stdio.h>
count(int); 
main()
{
  int x=4;
  count(x);
  return 0;
 }
 count(int n)
 {
   if(n>0)
   { 
     count(n-1);
     printf("%d",n);
     count(n-1);
   }
  }

当我们运行程序时count(4),count(3),count.....count(0)存储在堆栈中...但是当调用count(0)并且if条件为假时...那么控件在哪里?如果有人可以借助显示各种函数调用的图表来解释。

2 个答案:

答案 0 :(得分:0)

不需要图表。使用count(0)时,if语句失败,count会立即返回而不执行任何操作。

编辑:感谢Flexo指出原始形式的程序是UB,因为没有告诉声明返回int的函数在没有返回任何内容时会做什么。 (在实践中,我猜测大多数调用约定都是无害的,但当然它仍然是错误的。)

答案 1 :(得分:0)

你可以试试下面这段代码。

#include<stdio.h> 
count(int);  
int  main() 
{ 
    int x=4; 
    count(x); 
    return 0; 
} 

int count(int n) 
{ 
    if(n>0) 
    {  
        printf("%d",n); 
        return count(n-1);
    }
    else
    {
        printf("%d",n); 
        return n; 
    } 
}