求解答:“递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反”这句话在语句的执行中的具体意思
求解释的详细点
谢谢大家
求解释的详细点
谢谢大家
2018-11-26
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 依次递减。所以说:位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
举报