C语言中的递归是什么意思

#include<stdio.h>
#include<stdlib.h>
void cj(int n);
void main()
{
int n=10;
cj(n);

}
void cj(int n)
{
printf("%d\t",n);
if(n>0)cj(--n);
if(n>0)cj(--n);
}

这个程序是先执行完第一个递归在执行第2个么?搞不懂啊?

递归就是 函数自己调用自己 ..
第一个是主函数 ..
第二个cj()函数才是一个递归函数 ..
在cj()函数体里面 有cj(n--)这个语句 就是它再次调用自己 只不过参数变化了 ..追问

不是有2个cj(n--)么,是怎么递归的啊??

追答

你那个写错了 应该是只有一个重复的语句 ..
递归的的思想就是 自己调用自己 ..
一开始主程序中调用cj(10) ..
然后程序执行cj(10)
{
cj(9); //这里 cj()函数调用了自己,参数从10变成了9,然后cj(9)调用cj(8) 以此类推 ..
这就是递归,感觉就像镜子中的镜子一样,一层一层的 ..
}

补充:
不好意思 没写错;
就是cj(10) 运行到cj(0)之后 ..
再从cj(10) 运行到cj(0) ..

追问

是先运行上面那个递归,在运行下面那个??

追答

对 顺序是这样 ..

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-27
递归就是递推公式的模拟
函数直接间接的调用自己,一直到可以直接得到结果为止。
必须有一个可以不用递归,直接完成的情况。并且总是能够达到。
不然就是害自己了,你的程序永不结束,直到堆栈空间用完,程序或系统崩溃,莫名奇妙的退出。
真正的程序里,不会出现 阶乘运算、级数运算、幂指数运算等方面使用递归的代码。
这些完全可以使用迭代,而且高效。
递归用在树,图这样的数据结构上以及一些排序算法上,非常自然,而非递归算法却比较难懂,而且还不好实现.
你这个怎么这么象二叉树的先根遍历。本回答被网友采纳
相似回答