递归中Return实例分析

news/2025/4/19 3:58:12/文章来源:https://www.cnblogs.com/nagisb/p/18451430

函数递归

  • 局部函数变量的特性自成体系,作为调用函数自身
  • 递归函数不依靠任何外部资源,自成体系的迭代到基准值

return:返回特定的退出状态码,在函数结束时

#! /bin/bash
# using recursion
# 计算阶乘,formula:x!=x*(x-1)!, 使用递归函数得到(x-1)!function factorial {# 递归边界,根据1的阶乘是1if [ $1 -eq 1 ]; thenecho 1elselocal temp=$[ $1 -1 ]# 接收函数的输出,并将返回值传递给resultlocal result=$(factorial $temp)echo $[ $result * $1 ]fi
}read -p "Enter value: " valuezi
# result与自成体系的递归函数不同
result=$(factorial $value)
echo "The factorial of $value is : $result"

理解优化

  • 当到达递归边界后,函数return最底层被调用并开始回溯
    • 递归函数的return(回溯)顺序和调用顺序刚好相反!

那是因为上一层执行递归之后的代码会调用下一层返回的值
亦或者说:最底层的实现(return1)作为最外层的调用(return4),如此循环往复

例如,计算 factorial 4 的过程如下:

  • factorial 4 调用 factorial 3,返回 3 * factorial 3

  • factorial 3 调用 factorial 2,返回 2 * factorial 2

  • factorial 2 调用 factorial 1,返回 1 * factorial 1

  • factorial 1 返回 1
    逐层返回时:

  • factorial 2 返回 2 * 1 = 2

  • factorial 3 返回 3 * 2 = 6

  • factorial 4 返回 4 * 6 = 24

  • 当递归停止后,函数内部的result返回的是之后的阶乘,因为每一层递归都会将当前的 result 乘以当前的 $1,直到最外层调用。

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

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

相关文章

phpvulhunter工具:静态 php 代码审计

phpvulhunter是一款PHP源码自动化审计工具,通过这个工具,可以对一些开源CMS进行自动化的代码审计,并生成漏洞报告。 1、安装 首先从github上进行获取: git clone https://github.com/OneSourceCat/phpvulhunter2、下载完成后,将工程目录放置于 WAMP 等 PHP-Web 运行环境中…

在K8S中,Pod 的重启策略有哪些?

在 Kubernetes 中,Pod 的重启策略(restartPolicy)是一个重要的属性,它定义了容器在终止后是否需要重启以及如何重启。Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。以下是每种策略的详细说明:Always:这是默认的重启策略。无论…

在K8S中,创建一个 Pod 的主要流程?

在 Kubernetes (K8s) 中创建一个 Pod 的主要流程可以分为以下几个步骤: 1. 编写 Pod 的配置文件 首先,你需要编写一个 YAML 或 JSON 格式的配置文件来定义 Pod 的属性。这个文件至少包含 Pod 的元数据(如名称、标签等)以及 Pod 规格(如容器的镜像、端口映射等)。一个简单…

在K8S中,Pod 可能位处于的状态有哪些?

在Kubernetes(K8S)中,Pod作为最基本的部署单元,其状态反映了Pod的生命周期和当前状况。Pod可能处于以下几种状态:Pending(等待中):Pod被创建后,正在等待调度器分配所需的节点资源。 可能的原因包括等待调度、等待下载镜像、资源不足(如CPU、内存)导致调度器无法找到…

YOLOv8-seg训练与推理

1.YOLOv8-seg简介 YOLOv8-seg是YOLO系列模型的其中一个版本。YOLOv8-seg在继承YOLO系列模型高效性和准确性的基础上,增加了实例分割的能力。 2.数据集使用的数据集较简单,主要以下目录:images:存放原始图片(1500张),大小为128x128。部分如下: images_json:存放labelme标注的…

易基因: cfMeDIP-seq揭示cfDNA甲基化高效区分原发性和转移性前列腺|Nat Commun

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 前列腺癌(Prostate cancer,PCa)是男性中第二常见的恶性肿瘤,也是全球癌症相关死亡的第三大原因。虽然大多数原发性前列腺癌可以治愈,但转移性前列腺癌患者的5年生存率仍低至30%。大多数患者很快就会发展成…

Python 格式化输出的高级技巧与应用

在 Python 中,格式化输出是一种非常有用的技术,它可以让我们以更清晰、更易读的方式展示数据。以下是一些关于 Python 格式化输出的高级技巧和代码示例:使用占位符进行格式化name = "Alice"age = 25print("My name is %s and I am %d years old." % (na…

总结一下哪些情况会导致Segmentation fault 哪些情况会导致 Aborted

Segmentation fault(段错误)和 Aborted(中止)是两种不同的程序运行时错误。它们通常与不同的原因相关联,尽管最终都导致程序非正常终止。 导致Segmentation fault的情况: 段错误通常由于程序试图访问其没有权限的内存区域或者不存在的内存地址造成的,具体情况包括:解引…