刘加加在成长(C++语言学习中)

学习、工作、生活,这是三个问题。

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  38 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
#include<stdio.h>
void testfunc(int);
int main(void)
{
    testfunc(
1);
    
return 0;
}
void testfunc(int n)
{
    printf(
"Lv%d:%p\n",n,&n); //%p 地址显示格式
    if(n<4)
    {
        testfunc(n
+1);  //testfunc()调用了自己
    }
    printf(
"2Lv%d:%p\n",n,&n);
}
以上是一个递归的示例。
testfunc()在内部调用了自己,这样的后果是:暂时不执行最后面的“printf("2Lv%d:%p\n",n,&n);”,而是将 n+1作为参数调用了自己,这样重复,最终程序的结果是:

(根据电脑不同,地址可能有所不同)
程序具体运行步骤:
1.main()调用testfunc(1)
2.testfunc(1)执行,打印“lv1:0022FF60”,0022FF60是n的地址
3.n<4,条件成立, testfunc(1)调用testfunc(2)
4.testfunc(2)执行,打印“lv1:0022FF40”,因为此时testfunc(2)的变量n已经不是testfunc(1)中的变量n了,所以地址不同。(函数的参数作用域只在当前函数)
5.n<4,条件成立,testfunc(2)调用testfunc(3)
6.testfunc(3)执行,打印“lv1:0022FF20”
7.n<4,条件成立,testfunc(3)调用testfunc(4)
8.testfunc(4)执行,打印“lv1:0022FF00”
9.n<4,条件不成立,打印“2lv1:0022FF00”
10.返回调用testfunc(4)的testfunc(3),打印“2lv1:0022FF20”
11.返回调用testfunc(3)的testfunc(2),打印“2lv1:0022FF40”
12.返回调用testfunc(2)的testfunc(1),打印“2lv1:0022FF60”

OK,这就是函数的递归调用,通俗的说就是函数自己调用自己。以前学时没有弄明白,现在终于弄明白了。
posted on 2008-05-14 00:08 刘加加 阅读(388) 评论(0)  编辑 收藏 引用 所属分类: 学习C语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理