函数递归输出1~100的数字及递归的栈溢出问题

什么是递归?

  • 递归就是函数⾃⼰调⽤⾃⼰
  • 递归中的递就是递推的意思,归就是回归的意思
  • 如果递归就像循环一样,打一个大的复杂问题转化一个小的问题,但是要与原问题相似,分解成规模较⼩的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了,所以递归的思考⽅式就是把⼤事化⼩的过程

递归有哪些限制条件?

  • 当满⾜这个限制条件的时候,递归便不再继续
  • 每次递归调⽤要越来越接近这个限制条件

图画图分析:


我们假设要打印1~3的数字,为了更好地理解我们假设有三个函数函数A、函数B、函数C,,还有一个最后返回的函数(主函数)

在这里插入图片描述
在递归回归的过程中就把数字打印了


代码实现:

int digital(int n)
{if (n > 1){digital(n - 1);  //递归的限制条件}printf("%-5d", n);}int main()
{int c = 0;digital(10);return  0;
}

出现栈溢出的情况:

错误的代码示例:

int digital(int n)
{if (n > 1){digital(n - 1);}printf("%-5d", n);}int main()
{int c = 0;digital(10000);return  0;
}

报错:
在这里插入图片描述
Stack overflow 的意思就是栈溢出的意思
解释:

在每⼀次函数调⽤,都需要为本次函数调⽤在内存的栈区,申请⼀块内存空间来保存函数调⽤期间的各种局部变量的值

当递归递推的很深,都要每一次调用函数为内存申请一块内存空间,越来越多就回益处,所以如果要完成一个任务比较复杂,会浪费很多很多的内存空间的会就不要用递归来解决了,另一种方法就是迭代(就是循环的方法解决问题)
比如:我们打印1~100的数值

#include<stdio.h>
int main()
{int i = 0;for (i = 1; i <= 100; i++){printf("%-5d", i);}return 0;
}

总结:

迭代的方式是比递归的效率高很多,递归有时候使用不当,就会导致一些问题,不好维护,也不要什么要的代码就想着使用递归,适可⽽⽌就好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【scau大数据技术与原理2】综合性实验Spark集群的安装和使用——安装启动spark shell篇

实验内容简介&#xff1a; Spark是一个分布式计算框架&#xff0c;常用于大数据处理。本次实验中&#xff0c;首先设计一个包含主节点和从节点的Spark集群架构&#xff0c;并在CentOS的Linux环境下进行搭建。通过下载并解压Spark安装包&#xff0c;配置环境变量和集群参数&…

【Python Cookbook】S1E09 对切片命名

目录 问题解决方案讨论 问题 代码的可阅读性非常重要&#xff0c;如何增强切片中的可阅读性&#xff1f;本文将提供一种方案。 解决方案 假设有一些代码用来从字符串的固定位置取出具体的数据&#xff1a; record "...100...513.25..." cost int(record[3:6]) …

【显示方案IC-速显微】

最近偶然间接触到“速显微”的显示方案&#xff0c;个人体验了一把感觉还是挺顺手的&#xff0c;虽然手里没有板子没有上手测试一番。 这是他们的官网链接&#xff1a; https://www.thorsianway.com/product/chip 从官网可以看到有两颗个系列的IC已经量产&#xff1a;GC9005和G…

Docker部署pulsar独立集群消息队列服务器

1、下载Pulsar docker 镜像 docker pull apachepulsar/pulsar:latest 2、生成Pulsar容器&#xff0c;把容器的6650和8080端口映射到宿主机的6650和8080端口&#xff0c;standalone参数表示pulsar为独立集群模式&#xff0c;把容器中的conf目录映射到宿主机的/var/lib/docker/…

【QEMU中文文档】1.1 支持的构建平台

本文由 AI 翻译&#xff08;ChatGPT-4&#xff09;完成&#xff0c;并由作者进行人工校对。如有任何问题或建议&#xff0c;欢迎联系我。联系方式&#xff1a;jelin-shoutlook.com。 原文&#xff1a;Supported build platforms — QEMU documentation QEMU 旨在支持在多个主机…

基础—SQL—DCL(数据控制语言)小结

一、总结 在SQL分类中的DCL语句部分&#xff0c;主要讲到了两个部分的知识。 1、用户管理 用户管理&#xff0c;主要是管理哪些用户可以访问当前 mysql 数据库。 包括&#xff1a;创建用户、修改用户密码以及删除用户 2、权限控制 权限管理&#xff0c;主要是控制我们当前用户…

vue前端Echars

<template><div :class"className" :style"{height:height,width:width}" /> </template><script> import * as echarts from echarts require(echarts/theme/macarons) // echarts theme 柱状图 import resize from ./mixins/re…

禁用USB端口的办法,哪一种禁用USB端口的方法好

禁用USB端口的办法&#xff0c;哪一种禁用USB端口的方法好 禁用USB端口是保护公司数据安全的一种常见做法&#xff0c;旨在防止未经授权的数据传输和潜在的恶意软件传播。以下是几种常见的禁用USB端口方法及其效果评价。 1、硬件方法&#xff1a; BIOS设置&#xff1a;通过BIO…

混合动力电动汽车介绍(一)

电动汽车发展的技术背景主要包含环境问题和能源问题两大方面。环境问题的表现形式为空气污染&#xff0c;而能源问题的表现形式为现有能源供应体系对化石燃料的过分依赖。《新能源汽车产业发展规划&#xff08;2021-2035&#xff09;》中明确我国新能源汽车技术研发的“三纵”、…

软件架构设计属性之5:可维护性属性分析与应用

文章目录 引言一、可维护性定义和重要性1.1 定义1.2 重要性 二、可维护性关键要素2.1 模块化2.2 单一职责2.3 低耦合2.4 高内聚2.5 抽象和封装2.6 实践建议 三、设计原则3.1 开闭原则3.2 依赖倒置原则3.3 评估方法3.4 挑战与解决方案 四、实战应用总结 引言 在当今数字化飞速发…

一文了解JVM面试篇(上)

Java内存区域 1、如何解释 Java 堆空间及 GC? 当通过 Java 命令启动 Java 进程的时候,会为它分配内存。内存的一部分用于创建 堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC 是 JVM 内部的一 个进程,回收无效对象的内存用于将来的分配。 2、JVM 的主要组成…

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions 前言一. 数据获取 fetch1.1 缓存 caching① 服务端组件使用fetch② 路由处理器 GET 请求使用fetch 1.2 重新验证 revalidating① 基于时间的重新验证② 按需重新验证revalidatePathrevalidateTag 1.3 缓存的退出方式 二. Ser…

windows操作系统提权之服务提权实战rottenpotato

RottenPotato&#xff1a; 将服务帐户本地提权至SYSTEM load incognito list_tokens –u upload /home/kali/Desktop rottenpotato.exe . execute -Hc -f rottenpotato.exe impersonate_token "NT AUTHORITY\SYSTEM" load incognito 这条命令用于加载 Metasploi…

【Linux】在Windows环境下配置两台Linux机器的文件互传

相信有很多云服务器小伙伴都有想把一台linux资源传到另一台机器&#xff0c;那么该怎样实现&#xff1f; 本篇文章的演示案例都是基于centous进行传输&#xff0c;ubuntu进行接收&#xff01; 别的方法也都是一样的&#xff01; 方法一&#xff08;基于xshell进行的压缩包win…

Java项目:92 基于SSM的办公管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 基于SSM的办公管理系统 1、项目介绍 基于SSM的办公管理系统主要是对于办公用品的申领进行管理&#xff0c;系统分为三种角色&#xff0c;超级管理员、企业 职…

利用WMI横向移动

一. WMI介绍和使用 1. WMI介绍 WMI是Windows在Powershell还未发布前&#xff0c;微软用来管理Windows系统的重要数据库工具&#xff0c;WMI本身的组织架构是一个数据库架构&#xff0c;WMI 服务使用 DCOM或 WinRM 协议, 在使用 wmiexec 进行横向移动时&#xff0c;windows 操…

vue中使用svg图像

一 、svg图像是什么 SVG&#xff08;可缩放矢量图形&#xff09;是一种图像格式&#xff0c;它以XML文档的形式存在&#xff0c;用以描述图像中的形状、线条、文本和颜色等元素。由于其基于矢量的特性&#xff0c;SVG图像在放大或改变尺寸时能够保持图形质量不受影响。这种格式…

Java 异步编编程——Java内置线程池(Executor 线程池)

文章目录 知道线程池是什么以及解决什么问题Java 内置线程池Java 内置线程池设计结构及执行机制ThreadPoolExecutor 中的概念生命周期核心参数阻塞队列4 种任务拒绝策略 线程池使用场景 知道线程池是什么以及解决什么问题 线程池&#xff08;Thread Pool&#xff09;是一种基于…

devicemotion 或者 deviceorientation在window.addEventListener 事件中不生效,没有输出内容

问题&#xff1a;devicemotion 或者 deviceorientation 在window.addEventListener 事件中不生效&#xff0c;没有输出内容 原因&#xff1a; 1、必须在Https协议下才可使用 2、必须用户手动点击click事件中调用 &#xff0c;进行权限申请 源码&#xff1a; <!DOCTYPE h…

JVM 虚拟机

JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机&#xff0c;虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机有&#xff1a;JVM、VMwave、Virtual Box等。JVM 是一台被定制过的现实当中不存在的计算…