【发布时间】:2016-07-20 14:14:10
【问题描述】:
以下是两个类似的示例,它们定义了一个递归函数,该函数将打印小于 5 的数字的位数,同时对它们进行计数。
输入:12345
输出:1234 : 4 //有4位小于5
#include <stdio.h>
int function(int n) {
if(!n) return 0;
int r = function(n/10);
if ((n%10) < 5) {
printf("%d", n%10);
return r+1;
}
else return r;
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
具有相同功能的第二个代码,但会反向打印我似乎无法理解的所有内容。希望问题说清楚。
输入:12345
输出:4321:4
#include <stdio.h>
int function(int n) {
if(!n) return 0;
if(n%10<5) {
printf("%d", n%10);
return function(n/10)+1;
}
return function(n/10);
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
【问题讨论】:
-
比较两个代码。他们有什么不同?由于您的问题与输出数据的顺序有关,因此要特别注意操作的顺序。提示:将函数结果分配给变量本身与它没有任何关系。在不改变其可观察行为的情况下,重写第二个代码来做到这一点并不难。
-
试着用铅笔和一张纸来解决这个问题。当你调用 function(12345) 时会发生什么?对于情况 2,它未通过 n%10