-6

可能重复:
这段代码中到底发生了什么?

在这个问题中,我无法应用我的递归概念

#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条件为假......那么控制权在哪里?请如果有人可以借助显示各种函数调用的图表进行解释。

4

2 回答 2

0

不需要图表。使用count(0),该if语句失败,并count立即返回而不做任何事情。

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

于 2012-09-06T12:24:30.073 回答
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; 
    } 
} 
于 2012-09-06T12:35:35.067 回答