新手函数推荐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♪(・ω・)ノ

posted @ 2021-10-04 13:32  未定义式  阅读(75)  评论(0)    收藏  举报