当前位置: 首页 > news >正文

算法——递归

学习目标:

  • 掌握算法入门知识

学习内容:

  1. 递归的定义
  2. 例题详细步骤讲解

1. 递归的定义

递归虽然每次调用的是相同的子程序,但它的参量、输入数据等均有变化,且随着调用的不断深入,必定会出现调用到某一层的函数时,不再执行递归调用而终止函数的执行。

输入输出以栈的形式存放。每调用一次进栈一次,当返回时执行出栈,把当前栈顶保留的值送回相应的参量中进行恢复,并按栈顶中的返回地址,从断点继续执行。

2. 例题详细步骤讲解

#include <stdio.h>
void fun(int n)
{
   if (n<1) return;
  else
  {	printf("调用f(%d)前,n=%d\n",n-1,n);
		fun(n-1);
		printf("调用f(%d)后:n=%d\n",n-1,n);
  }
}

在该例子中,n<1即递归出口。

  • 当n=5时,分析下整个递归过程:
    (1)n>1,输出 “调用f(4)前,n=5” ,递归开始,执行fun(4)
    (2)n>1,输出“调用f(3)前,n=4”,递归开始,执行fun(3)
    (3)n>1,输出“调用f(2)前,n=3”,递归开始,执行fun(2)
    (4)n>1,输出“调用f(1)前,n=2”,递归开始,执行fun(1)
    (5)n>1,输出“调用f(0)前,n=1”,递归开始,执行fun(0)
    (6)n<1,return;
    (7)此时fun(0)调用完毕,从断点处继续向下执行,输出“调用f(0)后,n=1”
    (8)此时fun(1)调用完毕,从断点处继续向下执行,输出“调用f(1)后,n=2”
    (9)此时fun(2)调用完毕,从断点处继续向下执行,输出“调用f(2)后,n=3”
    (10)此时fun(3)调用完毕,从断点处继续向下执行,输出“调用f(3)后,n=4”
    (11)此时fun(4)调用完毕,从断点处继续向下执行,输出“调用f(4)后,n=5”

  • 时间复杂度:
    如果 n < 1,函数立即返回,不执行任何打印操作。
    如果 n >= 1,函数首先打印一条消息,然后递归调用自身 fun(n-1),最后再打印另一条消息。
    由于每次递归调用都会使 n 减少 1,直到 n < 1 为止,因此递归调用的深度是n。因此,时间复杂度是 O(n)。

  • 空间复杂度:
    主要考虑的是递归调用栈的使用。每次递归调用都会将当前函数的状态(包括参数、局部变量和返回地址)压入调用栈。递归调用的深度是 n,因此调用栈中最多将有 n 个函数帧,每个函数帧占用的空间是常数。因此,空间复杂度是 O(n)。

相关文章:

  • Mysql表字段字符集未设置导致乱码问题
  • java excel xlsx 增加数据验证
  • JavaWeb登录认证
  • Linux实操——在服务器上直接从百度网盘下载(/上传)文件
  • 【MySQL】InnoDB中的Buffer Pool
  • CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用
  • 基于专利合作地址匹配的数据构建区域协同矩阵
  • 记录一次解决springboot需要重新启动项目才能在前端界面展示静态资源的问题--------使用热部署解决
  • java23种设计模式-责任链模式
  • Java全流程供应链系统开源方案:前端后端分离
  • 免实名服务器新选择:AWS海外服务器三大核心优势解析——以aliyun国际版为对比
  • 2025系统架构师(一考就过):案例之四:架构复用、架构评估、特定架构(DSSA)、架构开发方法(ABSD)
  • 力扣-动态规划-518 零钱兑换Ⅱ
  • 笔记一:字符函数和字符串函数
  • gitlab初次登录为什么登不上去
  • 迈向更好的动态图学习:新架构和统一库阅读笔记
  • 获取 ubuntu 系统相关信息
  • C++效率掌握之STL库:string函数全解
  • 由 Mybatis 源码畅谈软件设计(三):简单查询 SQL 执行流程
  • ESP32移植Openharmony外设篇(9)NB-IOT
  • 唐山网站公司建站/淘宝关键词查询
  • docker安装wordpress/seo需要什么技术
  • 门户网站前期网络采集商家信息免费发布/2022年最近十大新闻
  • 单页网站是什么样子的/手机如何制作自己的网站
  • 宾馆酒店网站建设方案/cps推广接单平台
  • 电子商务网站软件建设的核心是什么/网站推广网络营销方案