首页 > 其他分享 >函数递归(详解)

函数递归(详解)

时间:2024-06-13 19:00:01浏览次数:23  
标签:1234 10 函数 递归 详解 得到 阶乘

一、什么是递归

在C语言中,递归就是函数自己调用自己

690d851b036c4852a670b26eaa7634c8.png

上面这个就是一个简单的递归,但是代码最终也会陷入死循环,导致栈溢出。 

二、递归的举例

1.求n的阶乘

我们知道的n的阶乘的公式为:n!=n*(n-1)!

根据函数可令n==0时,n的阶乘为1,其余的用上面公式计算

466cc433ed264593ac1c32e0e39a3189.png

2.顺序的打印整数的每一位

输入:1234   输出;1 2 3 4

输入;987     输出:9 8 7

1234%10就能得到4,1234/10得到123,123%10得到3,123/10得到12,12%10得到2,12/10得到1

pr(1234)就可以拆分成两步pr(1234/10)+printf(1234%10)

9d47297bbc494fb1ab663eca91e8f04f.png 

3.递归与迭代

像举例1,这个题很可能误用递归的方法,这个方法在计算大数据的情况下会出现错误

  1. 运算速度很慢
  2. 可能会超出函数栈帧

所以我们遇到这些题就要使用迭代的方法(通常是循环的方式)

这样既速度得到了提升,也不会存在超出范围的错误了 

 

标签:1234,10,函数,递归,详解,得到,阶乘
From: https://blog.csdn.net/L73S37/article/details/139661463

相关文章

  • SAAS详解
            在数字化时代,软件作为服务(SoftwareasaService,简称SaaS)的概念正逐渐成为企业运营和业务发展的重要驱动力。SaaS是一种基于云的应用程序交付模式,它允许用户通过互联网连接使用各种软件服务,而无需在本地计算机或服务器上安装和维护软件。这种新型的软件服务模......
  • C#中的BackgroundWorker详解
    在C#中,经常会有一些耗时较长的CPU密集型运算,因为如果直接在UI线程执行这样的运算就会出现UI不响应的问题。解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完成。但是原生接口的线程操作有一些难度,如果要更进一步的去完成线程间的通讯就会难上加......
  • 机器学习策略篇:详解清除标注错误的数据(Cleaning up Incorrectly labeled data)
    清除标注错误的数据监督学习问题的数据由输入\(x\)和输出标签\(y\)构成,如果观察一下的数据,并发现有些输出标签\(y\)是错的。的数据有些标签是错的,是否值得花时间去修正这些标签呢?看看在猫分类问题中,图片是猫,\(y=1\);不是猫,\(y=0\)。所以假设看了一些数据样本,发现这(倒数第二......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocusIoU等多种损失函数
    ......
  • [罗嗦的详解]BURP官方靶场Lab: SSRF with filter bypass via open redirection vulner
    参考视频:官方把场下的俩个视频https://youtu.be/iF1BPVTqM10抓取checkstore按钮的POST请求,请求体:stockApi=/product/stock/check?productId=3&storeId=1nextstore按钮的get请求:GET/product/nextProduct?currentProductId=3&path=/product?productId=4HTTP/2path参......
  • 高性能版本的零内存分配LikeString函数(ZeroMemAllocLikeOperator)
    继上一篇文章在.NETCore,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)分享了四种实现方式,笔者对这四种实现方式,不管是执行性能还是内存分配性能上,都不太满意。那么是否有好的实现方法呢?答案是有的。今天我们就搬出ReadOnlySpan<T>这个非常好用的结构类型,它是在.N......
  • 使用 Promise.withResolvers() 来简化你将函数 Promise 化的实现~~
    引言在JavaScript编程中,Promise是一种处理异步操作的常用机制。Promise对象代表了一个尚未完成但预期将来会完成的操作的结果。在本文中,我们将探讨如何通过使用ES2024的Promise.withResolversAPI来优化我们的Promise实现。现有实现的问题首先,让我们看一个简单的示例,展......
  • Python对象序列化库之dill使用详解
    概要在Python编程中,序列化(Serialization)和反序列化(Deserialization)是处理对象持久化和数据传输的常见任务。Python提供了内置的 pickle 模块用于对象序列化,但它在处理复杂对象(如带有lambda函数、生成器和闭包的对象)时存在一定局限性。dill 库是 pickle 的一个扩展......
  • synchronized详解
    Java锁与线程的那些事分析了Java锁的一些底层原理,该博文底部的四篇参考文章也挺有意思,有时间可以看一下synchronized使用方法与注意事项使用方法对象锁类锁具体的使用方法太过于基础,不再在这里赘述了。注意事项在应用synchronized的时候,有一些细节需要注意:被锁住的......