qq_36590891 2016-11-05 21:04 采纳率: 100%
浏览 1722
已采纳

c语言递归为什么不会无限循环?

Void up(int);
int main()
{
Up(1);
Return 0;
}
Void up(int n)
{
Printf("%d",n);
If(n<4)
Up(n+1);
Printf("%d",n);
}
为什么不会从1-4,4-1然后反复打印呢?
初学者一枚,手机打字,所以大小写有误。

  • 写回答

2条回答 默认 最新

  • 云镛 2016-11-06 18:26
    关注

    递归说到底是函数自己调用自己并且是嵌套调用,只要是调用,总有返回的时候,也就是被调函数结束返回上一级(调用函数)继续执行。
    在这里,函数调用自己时,传递的参数是值传递,被调函数并不会改变调用函数中的变量。请看下面的例子:
    int add(int n){
    n++;
    return 0;
    }
    int main(){
    int a = 5;
    add(a);
    printf("a = %d\n",a);//猜猜a等于几, 答案是a=5,原因是值传递,也就是执行add(a)时,把a复制了一份传给add函数的参数n。并不是把a自己
    //传给了add函数。
    }
    递归的本质是函数调用。只要是调用就有返回的时候。就是被调函数结束返回后,继续执行调用函数。在你的例子里就是执行printf("%d\n",n);-->up(n+1)后面的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部