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\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);

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

时间: 2024-10-31 12:47:59

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

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占

Go 语言递归函数

Go 语言递归函数 递归,就是在运行的过程中调用自己. 语法格式如下: 1 func recursion() { 2 recursion() /* 函数调用自身 */ 3 } 4 5 func main() { 6 recursion() 7 } Go 语言支持递归.但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中. 递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等. -----------------------------------------

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

Go 语言递归函数 递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } Go 语言支持递归.但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中. 递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等. 阶乘 以下实例通过 Go 语言的递归函数实例阶乘: package main import "fmt"

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

?? 卷 backup 的文件夹 PATH 列表卷序列号为 000000F4 D4A8:14B0J:.│  1.txt│  2.txt│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│  ├─文档│  │      第1讲 C语言第一阶段.doc│  │      │  └─视频│          第1讲 C语言第一阶段.mp4│          ├─2传智播客_尹成_C语言从菜鸟到高手_第二章C语言跨平台HelloWorld-A│  ├─第10节 2.5.1-2.5.7C

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

卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│  ├─文档│  │      第1讲 C语言第一阶段.doc│  │      │  └─视频│          第1讲 C语言第一阶段.mp4│          ├─2传智播客_尹成_C语言从菜鸟到高手_第二章C语言跨平台HelloWorld-A│  ├─2.1 C语言环境简

C语言 递归函数

递归函数 就是自身调用自身的函数,需要加条件来判定,否则无限调用 下面介绍一个简单的例子 1 //递归函数整理 2 long fun(int n) 3 { 4 long s; 5 if(n==1||n==2) 6 s=2; 7 else 8 s=n-fun(n-1); 9 10 return s; 11 } 12 13 int main(int argc, const char * argv[]) 14 { 15 printf("%ld",fun(6)); 16 /* 17 = 6 -

c语言递归函数的调用

int fun(); int main() { int n,sum=0,i; scanf("%d",&n); for (i=1; i<=n; i++) { sum+=fun(i); } printf ("%d/n",sum); } int fun (int m) { int a; if (m==1||m==2) a=1; else a=fun(m-1)+fun(m-2); return (a); }

Go语言之递归函数

Go 语言递归函数 递归,就是在运行的过程中调用自己. Go 语言支持递归.但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中. 递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等. package main import "fmt" func factorial(n uint64) uint64 { if n > 1 { return n * factorial(n-1) } return 1 } func main() { a :=

R语言学习笔记-机器学习1-3章

在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书中涉及11个案例.分12章.作者备注以及代码部分都讲得比较深.不过或许因为出书较早,在数据处理方面,他使用更多的是plyr包,而我用下来,dplyr包效果更好.所以许多涉及数据处理的代码,其实可以用更简洁的方法重写.但是思路却是实打实的精华. 我之前在某长途动车上啃完了前三章,两个案例.但越往后读,越觉得后面