• C语言递归函数讲解


    递归函数是什么?

    是函数、、、、、、、、、、、、、、、、、、、、

    你可以把它理解成是for循环与死循环的结合的函数。简单的说:递归函数是有条件终止的死循环函数;

            死循环函数这里是指在函数体中调用自身;

    举个列子:

    用递归函数算出1*2*3*4*..........*n的值

    int test_1(int n)

    {

      if(n==0)  //终止递归函数的循环

      retrun 1;  //1*(最终值) = (最终值)

      else    

      retrun test(n-1) *n;   //调用自身,参数-1,得到值,最后会得到最终值

      /*过程:

        1.  test(3)*4;

        2.  test(2)*3*4;

        3.  test(1)*2*3*4;

        4.  test(0)*1*2*3*4;

        注意,这里——(  上面的test(0)又会重新进入test,此时retrun 1  )

        所以步骤4实际上就是:  1*1*2*3*4;

        实际上元素:1,2,3,4都是使用了的,所以最终值就是(1*2*3*4),而另外的一个1(test(0))只是让test函数不再循环下去的一个条件里面的语句;

        也就是说在if里面可以返回任何值res,不一定只是返回1。但是必须满足res*1*2*3*4 = 1*2*3*4;这里的语句要根据4步骤来决定;

        我们回看4步骤:test(0)*1*2*3*4——test(0)会进入if条件里面,也就终止调用自身,终止了函数循环,然后返回值是1

        所以test(0)*1*2*3*4 = 1*1*2*3*4

      */

    }

    void main()

    {

      int res = test(4);

      printf("值=%d ",res);

    }

    以上就是递归函数;

    递归函数逻辑思维要求比较高,有些企业面试的时候也会涉及这类问题;

    我们可以看到这只是一个返回值为int 的递归函数,递归函数可不止这一种;

      ——还有递归函数操作数组,递归函数打印图案或者文字,递归函数甚至可以操作指针这些;

    万变不离其宗,下面举一些例子:

    // 1、给一个空的字符数组添加元素,(利用递归)
    void homeWork_2(char a[],int n)
    {
        if(n==0)
            printf("");
        else{
            a[n-1] =('a'+(n-1));
            homeWork_2(a, n-1);
        }

    // 2、利用数组名进行传参,进行数组的求和。

    int sum(int a[],int n){

        if(n==0)

             return 0;

         else

            return sum(a,n-1) + a[n-1];

    }

    int main(int argc, const char * argv[]) {

             int arrs[7] = {1,2,3,4,5,6,7};

          int res = sum(arrs, 7);

        printf("数组和是:%d ",res);

     这里简单举了两个例子,递归函数一定要多去思考逻辑和多去敲代码;只要逻辑清晰,代码熟练,无论是操作整型,数组,指针等等都是一样的。

  • 相关阅读:
    python写泰勒展开式
    8.QR分解的python实现
    7.Bolzmann机解决旅行商问题
    6.BP神经网络的python实现
    5.梯度寻优
    4.推荐系统
    4.决策树的探赜索隐
    BZOJ 1251 序列终结者
    BZOJ 3223 文艺平衡树 [codevs3303翻转区间]
    BZOJ 3224 普通平衡树
  • 原文地址:https://www.cnblogs.com/fire-7/p/7111790.html
Copyright © 2020-2023  润新知