递归函数是什么?

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

你可以把它理解成是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);

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

C语言递归函数讲解的更多相关文章

  1. 第二十四节:Java语言基础-讲解数组的综合应用

    数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...

  2. Go语言【第十三篇】:Go语言递归函数

    Go语言递归函数 递归,就是在运行的过程中调用自己,语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recurs ...

  3. GO语言学习(二十)Go 语言递归函数

    Go 语言递归函数 递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recu ...

  4. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  5. Go 语言递归函数

    递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } ...

  6. c语言递归讲解分析

    C语言允许函数调用它自己,这种调用的过程称为"递归(recursion)" 举例说明,如下代码: #include <stdio.h> void up_and_down ...

  7. Go语言之讲解GOROOT、GOPATH、GOBIN

    Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. go命令依赖一个重要的环境变量:$GOPATH GOPATH允许多个目录, ...

  8. return和exit以及C语言递归函数

    return 在主函数main()中,return整个函数退出,在子函数中return,只退出子函数. exit exit无论在函数什么位置退出整个函数 递归函数 #include <stdio ...

  9. C语言双向链表讲解

    一.双向链表的概念 双向链表基于单链表.单链表是单向的,有一个头结点,一个尾结点,要访问任何结点,都必须知道头结点,不能逆着进行.而双链表添加了一个指针域,通过两个指针域,分别指向结点的前结点和后结点 ...

随机推荐

  1. webpack配置(入口出口)

    const path=require('path'); //是node.js的path模块 //单入口,单出口 module.exports={ // 入口文件 entry:{ entry:'./sr ...

  2. Binary Search Tree Learning Summary

    BST Definition BST is short for Binary Search Tree, by definition, the value of right node is always ...

  3. day05 判断敏感字符

    1.判断一个字符是不是敏感字符: in 1.str v ="年龄多大了" if "大" in v: print("敏感") 2.list/t ...

  4. java获取泛型类型

    import com.alibaba.fastjson.TypeReference; return JSON.parseObject(str, new TypeReference<BaseRes ...

  5. 开发中经常遇到SVN清理失败的问题:

    开发中经常遇到SVN清理失败的问题: 解决方法: step1: 到 sqlite官网 https://www.sqlite.org/download.html 下载 sqlite3.exe       ...

  6. 斐波那契数列中获取第n个数据值

    class Fibonacci { /** * Description:迭代方法获取fibonacci第n项数值 * * @param int $n * @return int */ public s ...

  7. 汉语言处理工具pyhanlp的简繁转换

      繁简转换 HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合.这里我们不再做过多描述. 说明: ·Ha ...

  8. SVN 撤回已提交的代码

    1. TortoiseSVN -----> Show log 2.右键点击你想撤回的提交 -> Revert changes from this revision ----->Rev ...

  9. Excel函数之sumifs应用

    这个函数是用来进行多条件求和的一个函数 示例:根据表格求出“鼎盛书店”2012年度所有图书小计的总和,这里就用sumifs计算 首先定位结果输出单元格,祭出函数. sum_range参数就是筛选后需要 ...

  10. AndroidStudio 开发JNI

    Android版本不断更新,发现网上很多JNI的教程,都不太适用了,会遇到各种问题,今天自己来总结一个. NDK下载 我们下载NDK,有两种下载方式: 这是Google官方下载 点击下载NDK: 通过 ...