问答详情
源自:5-8 递归函数(二)

求解答:“递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反”这句话在语句的执行中的具体意思

求解释的详细点

谢谢大家

提问者:很社会的太阳 2018-11-26 16:21

个回答

  • w鲜花哥哥w
    2018-12-04 21:56:11

    哥,你头像好骚啊

  • 坠入时空
    2018-11-27 14:54:43

    int getPeachNumber(int n){    int num;    //定义所剩桃子数
        if(n==10)
        {       
            return 1;
        } 
        else
        {
            num = (getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
            printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
        }    
        return num;
    }

    就以试题的递归函数来说:

    if(n==10)

    这个判断语句,在调用递归之前,属于递归调用前的语句,这没问题吧。

    printf("第%d天所剩桃子%d个\n", n, num);

    这句输出函数,在调用递归之后,属于递归调用后的语句,这没问题吧。


    关于各个被调用函数的顺序是什么样的呢?

    我们从 

    int num = getPeachNumber(1);

    开始看,传入的参数是 1,而递归终结是 n = 10。所以说各个被调用函数的顺序应该是从 1 往 10 依次递增的。


    其中 if(n==10) 这句判断语句就是按照从 1 往 10 依次判断的。所以说:位于递归调用前的语句和各级被调用函数具有相同的执行顺序;


    而 我们再看 

    printf("第%d天所剩桃子%d个\n", n, num);

    它输出 n 的顺序却是从 10 到 1 依次递减。所以说:位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;