qq_36590891
2016-11-06 05:04
采纳率: 100%
浏览 1.7k
已采纳

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条回答 默认 最新

  • IT平头哥 2016-11-07 02: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)后面的。

    已采纳该答案
    打赏 评论
  • SkyAurora 2016-11-06 05:28

    递归第一次传入参数是1,进到函数发现1<4 又调用了UP(1+1)也就是UP(2),一次类推,直到调用到UP(4),进去后发现4<4不成立,你看被调用的UP函数在调用返回后就去执行下面的Printf("%d",n)了,然后就直接返回到曾经调用它的地方,以此类推他就一级级返回直到最先调用它的main函数那里。

    打赏 评论

相关推荐 更多相似问题