首页 > 其他分享 >C-递归原理

C-递归原理

时间:2024-02-11 17:44:05浏览次数:24  
标签:递归 int up 函数调用 down location 原理

  • 递归是什么

          函数调用自己本身这种调用过程称为递归

  • 递归原理

          函数调用本质就是入栈出栈的过程,先入后出;可以假设有一个函数调用链,不过实际使用fun2,fun3,fun4都是fun1

      

 

  • 递归实例

          可以使用循环的地方通常可以使用递归,递归方法简单,但效率没有递归高,因为每次递归都会创建一些变量放入栈中,递归调用的数量受限于内存空间

      

#include<stdio.h>
void up_and_down(int n);
int main(void)
{
    up_and_down(1);
    return 0;
 }
 
 void up_and_down(int n)
 {
     printf("level %d: n location %p\n",n, &n);
    if (n < 4)
     up_and_down(n+1);
    printf("LEVEL %d: n location %p\n", n, &n);
} 

运行结果:

level 1: n location 000000000062FE30
level 2: n location 000000000062FE00
level 3: n location 000000000062FDD0
level 4: n location 000000000062FDA0
LEVEL 4: n location 000000000062FDA0
LEVEL 3: n location 000000000062FDD0
LEVEL 2: n location 000000000062FE00
LEVEL 1: n location 000000000062FE30

 

 

标签:递归,int,up,函数调用,down,location,原理
From: https://www.cnblogs.com/lzqd/p/18013416

相关文章

  • 递归
    递归什么是递归递归是一种直接或间接调用自身函数或方法的函数或者方法。递归的优缺点优点递归的优点是逻辑简单清晰,对于一些问题用递归解决非常方便。缺点递归的缺点是调试困难,递归层次过多时,容易造成栈溢出。递归的组成递归的组成包括递归头和递归体两部分。递归头上......
  • 10分钟入门Flink--架构和原理
    相信你读完上一节的《10分钟入门Flink--了解Flink》对Flink已经有初步了解了。这是继第一节之后的Flink入门系列的第二篇,本篇主要内容是是:了解Flink运行模式、Flink调度原理、Flink分区、Flink安装。1、运行模式Flink有多种运行模式,可以运行在一台机器上,称为本地(单机)模式;也可以......
  • 【Java 并发】【十】【JUC数据结构】【十】PriorityBlockingQueue 原理
    1 前言这节我们继续看看另一个队列 PriorityBlockingQueue,优先级的哈。2 PriorityBlockingQueue介绍PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默认使......
  • 【Java 并发】【十】【JUC数据结构】【九】ConcurrentLinkedQueue 原理
    1 前言JDK中提供了一系列场景的并发安全队列。总的来说,按照实现方式的不同可分为阻塞队列和非阻塞队列,前者使用锁实现,而后者则使用CAS非阻塞算法实现。这节我们来看看 ConcurrentLinkedQueue。2 ConcurrentLinkedQueue介绍ConcurrentLinkedQueue是线程安全的无界非阻......
  • 线程池工作原理和实现原理
     为什么要使用线程池不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过newThread创建线程,每创建一个线程都需要在堆上分配内存空间,同时需要分配虚拟机栈、本地方法栈、程序计数器等线程私有的内存空间,当这个线程对象被可达性分析算法标记为不可用时被GC回收,这样......
  • 关于刘谦2024春晚的数学游戏原理
    自己想出来的!首先牌的顺序肯定是形如\(ABCDABCD\)。将牌的顺序考虑成一个字符环。按照名字长度对该字符环进行左移,本质上没有打乱这个环的顺序。因此在置换后,牌的顺序还是会形如\(ABCDABCD\)。将前三张随机放到牌堆中间,我们发现此时牌堆顶和牌堆底的两张牌是一样的。因此......
  • 力扣递归 两道简单题合成一道中等题之148. 排序链表
    递归归并排序,先找到终点,再合并两个链表 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]/** *Definitionforsingl......
  • 在k8S中,初始化容器(init container)概念原理是什么?
    在Kubernetes(k8S)中,初始化容器(InitContainer)是一个特殊类型的容器,它会在应用程序容器启动之前运行。它的主要目的是执行一些必要的先决条件任务,这些任务必须在主应用容器开始服务前完成。初始化容器的概念原理如下:顺序执行:Pod中可以定义多个初始化容器,它们按照配置文件......
  • 【JDK】Random 的局限以及ThreadLocalRandom 类原理剖析
    1 前言我们平时使用随机数大家可能会用到 Random,但是它的问题大家知道吗?以及该如何解决呢?这节我们就来看看。2  Random类及其局限性在JDK7之前包括现在,java.util.Random都是使用比较广泛的随机数生成工具类,而且java.lang.Math中的随机数生成也使用的是java.util.......
  • 力扣递归之88. 合并两个有序数组
    给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初......