这个函数是怎么计算的呢?

2023-12-26

我一直在研究 CodeWars katas,并且发现了有人提出的一个非常酷的解决方案。我的问题是我不明白它是如何工作的。我了解其中的一些内容,就像它通常在做什么,但不了解细节。它自己回来了吗?它是如何进行计算的?有人可以向我解释一下这一点,因为我真的要学习如何做到这一点。如果您知道我可以阅读或观看的任何其他资源,那将会很有帮助。我在 Swift 文档中没有看到类似的内容。

    func findDigit(_ num: Int, _ nth: Int) -> Int {
           let positive = abs(num)

           guard nth > 0 else { return -1 }
           guard positive > 0 else { return 0 }
           guard nth > 1 else { return positive % 10 }

           return findDigit(positive / 10, nth - 1) }        

对于上下文:

描述:

函数 findDigit 将两个数字 num 和 nth 作为输入。它输出 num 的第 n 位数字(从右到左计数)。

Note

如果 num 为负数,则忽略其符号并将其视为正值。 如果 nth 不是正数,则返回 -1。 请记住 42 = 00042。这意味着 findDigit(42, 5) 将返回 0。

Examples

findDigit(5673, 4) 返回 5

findDigit(129, 2) 返回 2

findDigit(-2825, 3) 返回 8

findDigit(-456, 4) 返回 0

findDigit(0, 20) 返回 0

findDigit(65, 0) 返回 -1

findDigit(24, -8) 返回 -1

非常感谢任何帮助。谢谢。


这是一个简单的递归函数。递归意味着它一遍又一遍地调用自身,直到满足结束递归的条件。如果条件永远不满足,你最终会得到无限递归,这不是一件好事:)

由于您已经了解该函数的用途,因此以下是其内部工作原理的详细信息:

// Saves the absolute value (removes the negative sign) of num
let positive = abs(num)

// Returns -1 if num is 0 or negative
guard nth > 0 else { return -1 } 

// Returns 0 if the absolute value of num is 0 (can't be negative)
guard positive > 0 else { return 0 } // Could be guard positive == 0

// nth is a counter that is decremented with every recursion.
// positive % 10 returns the remainder of positive / 10
// For example 23 % 10 = 3
// In this line it always returns a number from 0 - 9 IF nth <= 0
guard nth > 1 else { return positive % 10 }

// If none of the above conditions are true, calls itself using
// the current absolute value divided by 10, decreasing nth.
// nth serves to target a different digit in the original number
return findDigit(positive / 10, nth - 1) 

让我们逐步运行一个示例:

findDigit(3454, 3)
num = 3454, positive = 3454, nth = 3
-> return findDigit(3454 / 10, 3 - 1)

num = 345, positive = 345, nth = 2 // 345, not 345.4: integer type
-> return findDigit(345 / 10, 2 - 1)

num = 35, positive = 35, nth = 1
-> return 35 % 10
-> return 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个函数是怎么计算的呢? 的相关文章

  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 内联还有用吗? [复制]

    这个问题在这里已经有答案了 我相信 inline已经过时了 因为我读过here https isocpp org wiki faq inline functions 无论您如何将函数指定为inline 这是允许编译器忽略的请求 编译器可能会
  • 函数内部变量的赋值会改变外部的赋值 - Python

    我从使用 Matlab 转向使用 Python 使用函数时的变量赋值让我感到困惑 我有一个代码如下 a 1 1 1 def keeps x y x y 1 2 return y def changes x y x y 1 2 return
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • Javascript:函数的“无限”参数?

    在 Chrome 中 当我输入console log在下面的一项中 console log A parameter A parameter A parameter A parameter A parameter A parameter A
  • PolyML 函数和类型

    一对函数tofun int gt a gt a and fromfun a gt a gt int这样 fromfun o tofun n评估为n对于每一个n int 任何人都可以向我解释这实际上要求什么 我正在寻找更多对此的解释 而不是实
  • 为什么在 php 类中作为数组项的函数不起作用

    比如我有这样一段代码 效果很好 但是如果 A 不仅仅是一个变量 而且是一个类方法 那么这不起作用
  • 效率。函数返回值与输出参数

    函数返回值与 输出 参数 哪一个更快 我想我最好用我目前正在做的事情来解释 specify identifier and return pointer SceneNode createSceneNode const String desir
  • (typeof variable === "function") 和 jQuery.isFunction() 有什么区别?

    我一直用 typeof variable function 我偶然发现jQuery isFunction 我想知道 jQuery方法中的typeof方法有什么区别 不仅有什么区别 而且 什么时候适合使用typeof方法 什么时候适合使用jQ
  • Swift 3 将日期截断为日/月/年开始的简单方法

    有没有像我们在 Oracle 数据库中所做的那样简单的方法来截断日期 例如 我需要从午夜开始设置值 在 Oracle 中我可以执行 TRUNC SYSDATE 但我在 Swift 中看不到类似的方法 我检查了 StackOverflow 并
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • “无法调用非函数类型‘HTTPURLResponse’的值?”(Alamofire 4.0) [Swift 3.0]

    我收到此错误 无法调用非函数类型 HTTPURLResponse 的值 关于该部分 response request response data error 我想知道是否有人可以帮助我解决这个问题 Alamofire download ur
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 在 Swift 3 中单击和双击 UITableViewCell

    我在 TableView Cell 上有故事板 segue 我用它来在单元格单击中传输到另一个 VCdidSelectRowAt方法 现在我双击了TapGestureRecognizer处理手机上的点击问题 问题是 单击时 segue 正在
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • VB.NET - 类中的扩展函数?

    我正在尝试创建一个类库 其中包含将二进制整数转换为十进制的函数 反之亦然 这样我就可以将其导入到另一个项目中 而无需重写该函数 它工作得很好 这是课程的一部分 Public Class BinaryDenary Public Shared
  • 如何从 Ruby 模块中仅导入几个函数?

    假设我有一个带有以下方法的模块 function1 function2 function3 我想导入 function1 和 function2 但不导入 function3 有没有办法在红宝石中做到这一点 不确定是否有一种干净的方法来添加
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 如何获取触发ng-change的DOM元素?

    我正在使用 AngularJS 我有几个
  • AWS EC2 实例在开始使用 boto3 后立即停止

    使用 boto3 run instances 实例在 30 秒后自行停止 控制台中的状态转换原因显示 Client InstanceInitiatedShutdown Instance initiated shutdown 可能是什么问题
  • 合并两个不同类型的List

    我将数据从另一个列表添加到列表的对象中 public void MergeLsts List a lstA List b lstB foreach A dataA in lstA foreach B dataB in lstB if dat
  • 获取 Windows 中进程的峰值私有字节值

    ProcessExplorer 以某种方式获取此值并将其显示在每个进程的 性能 选项卡上 如何使用 Win32 API 获取它 解决方案 在 Peak Private Bytes 字段中 Process Explorer 实际上显示 Pro
  • Android 折线图/图形 API

    我需要向我的折线图 图表显示渐进的数字统计数据 请分享您的意见和建议 另请注意 我更喜欢有原生 API rohit AChartEngine 是一个适用于 Android 应用程序的图表库 目前支持以下图表类型 折线图 面积图 散点图 时间
  • WCF 中的“by ref”参数是好是坏?

    我最近看到一个 WCF 服务声明了操作合同by ref论据 我不知道为什么做出这个设计决定 操作无效 但此外 根据我的 WCF 知识 我无法判断这是否是一个好的实践 或者如果这不相关 你怎么认为 然而 根据这篇 Microsoft 文章 W
  • JVM退出后守护线程如何存活?

    我正在阅读有关 Java 的文档setDaemon 方法 当我读到 JVM 不等待守护线程完成就退出时 我感到很困惑 然而 由于守护线程本质上是 JavaThread 它大概依赖在 JVM 上运行来实现其功能 如果 JVM 在守护线程完成之
  • 如何在不引入偏差的情况下生成一个范围内的随机 Rust 整数?

    如何在 Rust 中生成随机骰子 我知道我可以使用rand random 但这需要我想生成一个整数类型的值 使用rand random
  • 向oracle中的现有表添加自动增量主键[重复]

    这个问题在这里已经有答案了 我想向具有数据的现有表添加新的自动增量主列 我怎么做 我首先添加了一列 然后尝试添加一个序列 之后我失去了如何插入该列并将其作为主键 假设你的桌子叫t1你的主键叫做id首先 创建序列 create sequenc
  • Authorization_IdentityNotFound 错误 MS Graph API

    我们的应用程序将执行简单的 User ReadBasic All 功能 据我了解 这些功能不需要管理员权限 使用此处记录的流程 https graph microsoft io en us docs authorization app on
  • 如何通过URL中的ID获取单个资源?

    我有一个网址 例如 http example com page page id http example com page page id 我想知道如何获得page id路由中 url 的一部分 我希望我可以设计一些方法 例如 route
  • 无法弄清楚在 django 开发环境中提供静态图像

    我读了文章 http docs djangoproject com en dev howto static files 以及该主题上的其他人 但仍然无法弄清楚如何显示图像 除非将指向 Web 服务上现有文件的链接硬编码到 html 模板中
  • 在 NSTextView 中替换 NSTextStorage 的正确方法?

    我正在制作一些文本查看器应用程序 目前我需要非常频繁和精确的线路处理能力 所以我想子类化NSTextStorage班级 但我找不到任何方法来设置新的文本存储NSTextView 我能找到的唯一方法是 NSLayoutManager repl
  • 在 libc++ 中使用 double 调用 std::from_chars 时出现编译错误

    我有一个小代码如下 int main double d const char str 26 50 std from chars str str strlen str d std cout lt lt d 此代码在 libstdc 中按预期工
  • 在 Gtk 3 中向 ToolButton 添加图标

    有没有办法将图标添加到 Gtk ToolButton Gtk3 使用 PyGi for Python 以添加到 GTK 3 工具栏 下面是我的代码 self addfile Gtk ToolButton self addfile set l
  • rspec 模拟:验证“应该”方法中的期望?

    我正在尝试使用 rspec 的模拟来设置我可以在 应该 方法中验证的期望 但我不知道如何做到这一点 当我在模拟上调用 should receive 方法时 它before all 方法退出后立即验证预期的调用 这是一个小例子 describ
  • App Engine 标准第二代运行时的 Memcache 替代品

    谷歌已经发布了其通用版本App Engine 标准的第二代运行时 https cloud google com blog products serverless announcing cloud run the newest member
  • R- 找到值的唯一排列

    我希望创建包含两个不同值的向量的所有可能排列 其中我控制每个值的比例 例如 如果我有一个长度为 3 的向量 并且我想要包含单个 1 的所有可能组合 则我所需的输出是一个如下所示的列表 list 1 lt list c 1 0 0 c 0 1
  • 插值到特定时间

    假设我有这个代码 import numpy as np import time from datetime import datetime class Measurements def init self time var value se
  • 这个函数是怎么计算的呢?

    我一直在研究 CodeWars katas 并且发现了有人提出的一个非常酷的解决方案 我的问题是我不明白它是如何工作的 我了解其中的一些内容 就像它通常在做什么 但不了解细节 它自己回来了吗 它是如何进行计算的 有人可以向我解释一下这一点