我们都已经知道了递归和循环的区别,那么今天我要给大家展示一个个人认为比较有代表性而且难度不是很高的递归题目——利用递归实现整数各部分的依次正序输出。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int print(int value) { if (0 == value / 10) { printf("%d ", value); } else { print(value/10); printf("%d ", value % 10);//最后一个递归else时候是个二位数,也就是最大的两位,正好依次输出,同理得到第三位... } } int main() { int k = 0; printf("请输入你要打印的整数:>"); scanf("%d", &k); printf(" "); print(k); return 0; }
这里我们不看主函数,只看函数print,这个是我定义的函数,用于输出整数。
看 if 部分,大家都看的明白,当这个整数只有个位数的时候,就输出他。
这里提一下递归的重要思想,就是一环扣一环,需要找到一个出口,还需要找到一个关系。
这个 if 就是出口,当输出最后一个的时候,这个函数也就结束了。
在看 else 部分,这里看似只有一个 printf 语句,实际已经输出了所有字符。
接下来就提到这个关系:
以数字1234为例。
当执行 if 部分的时候,输出为1;
结束这层递归回到上一层递归value值为12,所以能输出2;
结束这层递归回到上一层递归value值为123,所以能输出3;
结束这层递归回到上一层递归value值为1234,所以能输出4;
结束,所以输出结果如下: