精华内容
下载资源
问答
  • 递归函数
    千次阅读 多人点赞
    2021-02-27 15:44:45

    递归

    递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件

    注:
    递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    //递归
    void test(int num)
    {
    	if (num == 1)
    	{
    		printf("%d\n", num);
    		return;//终端函数很重要
    	}
    	test(num - 1);
    	printf("%d\n", num);
    }
    int main()
    {
    	test(3);
    	printf("main\n");
    	return 0;
    }
    

    输出结果:123
    在这里插入图片描述
    字符串逆序输出

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    //利用递归实现字符串的逆序输出
    void test(const char *str)
    {
    	if (*str == '\0')//比较的是字符串是否等于\0
    		return;
    	test(str + 1);
    	printf("%c\n", *str);//每次打印字符串中第一个字符
    }
    int main()
    {
    	test("happy end");
    	printf("\n");
    	return 0;
    }
    

    在这里插入图片描述

    斐波那契数列:前两项之和等于第三项

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    //斐波那契数列 1 1 2 3 5 8 13 21 34 55....
    int test(int num)
    {
    	if (num == 1 || num == 2)
    		return 1;
    	else
    		return test(num - 1) + test(num-2);
    }
    int main()
    {
    	printf("%d", test(10));
    	printf("\n");
    	return 0;
    }
    

    在这里插入图片描述

    阶乘

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    //阶乘:n表示 阶乘 乘到几
    int test(int num)
    {
    	if (num <= 0)
    	{
    		printf("输入有误");
    		return 0;
    	}
    	if ( num == 1)
    		return 1;
    	return test(num - 1) * num;
    }
    int main()
    {
    	printf("%d", test(5));
    	printf("\n");
    	return 0;
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    特点:

    递归函数特点

    1. 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算5的阶乘时每递推一次变量都不同;
    2. 每次调用都会有一次返回,如计算5的阶乘时每递推一次都返回进行下一次;
    3. 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
    4. 递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
    5. 递归函数中必须有终止语句。

    效率

    1.系统栈(也叫核心栈、内核栈)
    是内存中属于操作系统空间的一块区域,其主要用途为: (1)中断现场,对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出; (2)保存操作系统子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局部变量。

    2.用户栈
    是用户进程空间中的一块区域,用于保存用户进程的子程序间相互调用的参数、返回值、返回点以及子程序(函数)的局部变量。
    我们编写的递归程序属于用户程序,因此使用的是用户栈。

    3.栈溢出
    函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后的结束点后函数才能依次退出,而未到达最后的结束点之前,占用的栈空间一直没有释放,如果递归调用次数过多,就可能导致占用的栈资源超过线程的最大值,从而导致栈溢出,导致程序的异常退出。

    综上:
    函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N次局部变量、N次形参、N次调用函数地址、N次返回值,势必效率低.

    优点

    1.代码简洁、清晰,易懂

    对于我们,能用循环解决的,尽量不适用递归.
    下面是实际使用递归解题的模板和技巧
    轻松学会递归秒杀题目

    更多相关内容
  • 如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-...
  • 递归函数两大特点: 1.能够调用函数自身 2.至少有一个出口(结束函数自身调用) 函数实现: def calnum(num): if num != 1: # 递归调用自身函数 csum = num * calnum(num - 1) else: # 设置递归出口 csum = 1...
  • 根据题目要求使用递归函数,根据题目给定的数学算式,求出Succ(n)的值。可以在每一次调用递归函数时增加一个计数器,用来计算调用了多少次函数,最后输出Succ(n)的值和调用递归函数次数的值。
  • JS中递归函数

    2020-11-23 15:20:15
    编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数递归函数不能定义为内联函数。 递归函数: function factorical(num){  if(num<=1){  return 1;  }  else{  return num...
  • 在本文中我们通过实例给大家讲解了关于Python递归函数的用法以及相关知识点,需要的朋友们学习下。
  • Python 递归函数 如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要...
  • 本文以一个简单的实例讲述了python实现斐波那契数列数列递归函数的方法,代码精简易懂。分享给大家供大家参考之用。 主要函数代码如下: def fab(n): if n==1: return 1 if n==0: return 0 else: result=int...
  • 本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下: 递归函数 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘 n! = 1 *...
  • [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 递归函数的调用就说这么多了 js递归函数调用自身时的保险方式。 来自js高级程序设计 一个典型阶乘递归函数: 代码如下: function fact(num){ if (num<=1){ ...
  • 递归函数即直接或间接调用自身的函数,且递归过程中必须有一个明确的递归结束条件,称为递归出口。递归极其强大一点就是能够遍历任意的,不可预知的程序的结构,比如遍历复杂的嵌套列表。 递归求和 我们可以利用...
  • 主要介绍了php递归使用示例(php递归函数),包括递归获得角色ID字符串、递归获取级联角色信息数组、通过父角色的id获取子角色信息,需要的朋友可以参考下
  • Go 语言递归函数

    2021-01-03 04:49:24
    Go 语言递归函数 递归,就是在运行的过程中调用自己。 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } Go 语言支持递归。但我们在使用递归时,开发者需要设置...
  • 1 递归函数的特点 特点 一个函数 内部 调用自己 函数内部可以调用其他函数,当然在函数内部也可以调用自己 代码特点 函数内部的 代码 是相同的,只是针对 参数 不同,处理的结果不同 当 参数满足一个条件 时,函数...
  • 本文实例讲述了C++使用递归函数和栈操作逆序一个栈的算法。分享给大家供大家参考,具体如下: 题目: 一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为:5、4、3、2、1。 将这个栈逆置后栈顶到栈底分别为1、2、...
  • 本文实例讲述了JavaScript递归函数定义与用法。分享给大家供大家参考,具体如下: 递归函数是一个函数通过名字调用自身的情况下形成的,比如经典的递归阶乘函数: function factorial(num) { if (num <= 1) { ...
  • 递归函数示意图.pdf

    2021-02-26 09:57:32
    简单的递归函数示意图-PDF可编辑格式,方便自己可视化了解递归函数每个步骤的状态
  • 详解python中递归函数

    2020-09-19 11:10:49
    主要介绍了python递归函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了Lua中的递归函数写法实例,本文直接给出代码实例,并作了简洁注释,需要的朋友可以参考下
  • 采用递归的方式求π,精确度和网上的其他方式求π差不多。我之所以会想着用递归来求π,纯属因为自己在某次考试中遇到了却做不出来的气愤。。。。
  • c++递归函数基本代码.zip
  • 什么是递归函数/方法?任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法,接下来详细介绍需要了解的朋友可以参考下
  • 递归函数的定义 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数递归函数的特点 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但...
  • 在本篇内容里小编给大家分享了关于C++实现递归函数的教学步骤,需要的朋友跟着参考下。
  • 主要介绍了php使用递归函数实现数字累加的方法,涉及php递归操作的技巧,需要的朋友可以参考下
  • C语言中递归函数的设计.ppt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 620,724
精华内容 248,289
关键字:

递归函数