新手函数推荐2【含递归】
新手写题目经常会遇到差不多的题目,所以平时我们经常吧常用的求解过程封装成函数,以后写题自己调用一次就好啦,这里给大家分享几个函数。
老师也讲到了递归,我也分享一些递归的写法。
1正序递归输出数字里面各个位数字:
void positivePrint(int num)
{
int n = num%10; //把尾巴数字记下来
num/=10; //把尾巴数字去掉,提取出尾数.
if(num!=0)positivePrint(num); //递归
printf("%6d",n);
}
这是上课讲的正序递归输出数字里面各个位数的函数,但是可读性不好,递归对于别人的阅读和分享并非是好用的东西,让别人读得懂才是程序员的能力,这里重点还是分享一下递归思想。
大名鼎鼎的汉诺塔堆栈题目也是几行递归就能完美解决。
2判断素数:
bool isSu(int su)
{
if (su < 2)
{
return false;
}
else {
int sqrtSu = sqrt(su);
int i = 2;
for (i = 2;i <= sqrtSu;i++)
{
if (su % i == 0)
{
return false;
}
}
}
return true;
}
如何使用他呢,你把需要判断的素数丢进去 isSu(“数字”) ,他会返回true 和 false,放在if语句里面会判断是否执行 if (isSu(su)) ,
为什么要用bool?告诉你们这是判断类型的函数,丢进去的素数使用范围正负都可以。
3阶层
double fact( int n ){
int sum=1;
for(;n>0;n--){
sum*=n;
}
return sum;
}
递归版本
double fact( int n ){
if(n==1||n==0){
return 1;
}
if(n>1){
return n*fact(n-1);
}
}
为啥要用double?有些题目阶层算的很大,如果double还不行,那么我们必须分批算,而不是吧阶层一次性算完,而且递归实属下策,不推荐,除非你第一反应能想到递归,或者递归更能很好反应解决思路,否则刻意用递归就是不够效率了。
为啥递归不太好,因为递归是链式调用函数,好几个函数同时开着没释放是不是要炸?所以只有特殊情况才非常好用。
今天就分享到这里啦!!Thanks♪(・ω・)ノ
浙公网安备 33010602011771号