这里是目录哦
- 题目
- 代码
- 运行截图
- 递归思路
- 递归停止条件
- 如何实现“按顺序”
- 悟了✨
- 加油🎉
题目
按顺序打印一个整数的每一位。
代码
#include<stdio.h>
void Print(int n)
{
if (n > 9)//递归停止条件
{
Print(n / 10);//不断趋近递归停止条件
}
printf("%d ", n % 10);
}
int main()
{
int m = 0;
scanf("%d", &m);
Print(m);
return 0;
}
运行截图
递归思路
以m=198为例:
递归停止条件
可以发现,if (n > 9)//递归停止条件
和Print(n / 10);//不断趋近递归停止条件
都含有同一个字母n
。通过控制那个相同的字母逐渐符合“停止条件”,来控制递归函数的停止。
更多递归练习和理解,可参考(这不是很难的题,你可以懂):
(弟)递归•斐波那契数、n的k次方
如何实现“按顺序”
以m=198为例:
Print
函数中的printf("%d ", n % 10);
只有被/
到只剩一位数的1才能打印。其他的都会因为进入if
而进入不断的递归,直到打印了1以后才往回走。所以可以实现按顺序打印。
悟了✨
其实递归不要想得太复杂,只要是不断使用同一个函数,就可以考虑递归,除非有明显的缺陷。所谓的缺陷就是“递归反而会让程序更麻烦”的情况。
一个问题直接求解时不好求解,如果可以将其划分成其子问题,并且子问题和原问题有相同的解法时,就可以使用递归的方式解决。
决定使用递归后,只需要基于你的目的,考虑开头第几个递归函数的执行思路就可以了【给自己举简单的具体例子帮助理解】,因为其余都一样。比如,你要按顺序打印,那就会想到用n % 10
,只有当n
是个一位数时,才可以打印出n
。那就是说,10以及大于10的都不可以打印,即if (n > 9)
,无法实现目的的就放进递归。
递归中一般要用if
,因为要写递归停止条件。并且递归函数中最后执行的一定是停止条件情况下的操作。
加油🎉
所有值得做的事,都值得把它做好。
你又向目标迈进了哦!
❤️❤️❤️恭喜! 恭喜! 又收了一名小弟! ❤️❤️❤️