递归函数是什么?

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

你可以把它理解成是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\n",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\n",res);

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

 

posted on 2017-07-03 16:31  嵌入式开发员  阅读(2279)  评论(0编辑  收藏  举报