为了账号安全,请及时绑定邮箱和手机立即绑定

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

求解释的详细点

谢谢大家

正在回答

2 回答

哥,你头像好骚啊

1 回复 有任何疑惑可以回复我~
#1

w鲜花哥哥w 回复 很社会的太阳 提问者

哈哈。可以果然很社会
2018-12-05 回复 有任何疑惑可以回复我~
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 依次递减。所以说:位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;

10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信