首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中使用递归打印模式

在Swift中使用递归打印模式
EN

Stack Overflow用户
提问于 2019-08-04 21:44:46
回答 1查看 133关注 0票数 0

我想打印一个图案:首先一个接一个地减少5,直到我们达到0或负数,然后我们增加5,直到我们达到n。

我试过这段代码,但它在10,5:

代码语言:javascript
复制
import Foundation

func printPattern(n : Int) {
    if n <= 0 {
        if n == n {
            return
        } else {
            print(n)
            printPattern(n: n + 5)
        }
    }

    if n > 0 {
        print(n)
        printPattern(n: n - 5)
    }
}

printPattern(n: 10)

我希望输出是10,5,0,5,10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-04 21:49:17

这将是:

代码语言:javascript
复制
func printPattern(n : Int) {

    if n <= 0 {
        print(n)
    }
    else {
        print(n)
        printPattern(n: n - 5)
        print(n)
    }

}

因此,使用此调用:

代码语言:javascript
复制
printPattern(n: 10)

输出为:

10 5 0 5 10

第一次调用printPattern会打印两个10

第二次调用printPattern将打印两个5

printPattern的第三次也是最后一次调用将打印0

递归调用嵌套在每次调用中的两个打印之间,这就是您获取模式的方式。

调用顺序如下所示:

代码语言:javascript
复制
printPattern(n: 10)
  print(10)
  printPattern(n: 5)
    print(5)
    printPattern(n: 0)
      print(0)  // base case
    print(5)  // upon return
  print(10) // upon return

你在你的函数中做错了什么?

您的函数似乎正在尝试根据当前值是正还是零/负来判断加/减5的方向。这样做的问题是,您可能会陷入打印05不断切换方向的循环中。因为你通过了两个方向的5,所以你需要一些其他的方式来表示增加与减少。

您的函数当前只是输出10, 5,因为当您转到0时,check if n == n始终为真。它检查的是if 0 == 0,而不是if 0 == 10。如果要对照n的原始值进行检查,则需要将其作为单独的输入进行传递。

这大致是您正在尝试的内容:

代码语言:javascript
复制
func printPattern(n: Int, decreasing: Bool = true, start: Int? = nil) {
    // If there is no start value, use n
    let start = start ?? n

    // recursive base case
    if n > start {
        return
    }

    // if we're already increasing or we have reached zero/negative
    // time to increase
    if !decreasing || n <= 0 {
        print(n)
        printPattern(n: n + 5, decreasing: false, start: start)
    } else {
        // otherwise we are still decreasing
        print(n)
        printPattern(n: n - 5, decreasing: true, start: start)
    }

}

printPattern(n: 10)

10 5 0 5 10

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57347062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档