如何在 swift 中的函数中正确调用另一个函数?

How to properly call another function within a function in swift?

我正在学习 swift 并且我已经编写了两个函数并亲自尝试过它们,它们都运行良好。但是,当我尝试在另一个函数中调用一个函数时,我似乎无法获得所需的输出。

手头的任务是一个函数应该打印素数,而另一个函数是计算并检查数字是否是素数.我应该从 print Prime numbers 函数调用 check if number is prime

下面是我的代码:

此函数计算X:Int是否为质数。它设置为布尔值,因为我应该在它下面的函数中打印 "true" 或 "false"。

func isPrime(_ x: Int) -> Bool {
    if(x%2 == 0 || x%3 == 0){
        if(x == 2 || x == 3){
            return(true)
        }
        return(false)
    }
    else{
        //if the number is less than or equal to 1, we'll say it's not prime
        if(x <= 1){
            return(false)
        }


  }
    return true
}

本篇计算1到n的素数打印

func PrintPrimes(upTo n: Int) {
    for x in 1...n {
        var count = 0
        for num in 1..<x {
            isPrime(x)
            count += 1

        }
        if count <= 1 {
            print(isPrime(x))
        }
    }
}

这篇文章只运行了两次,我不确定为什么。我不知道是不是因为我没有正确调用它,或者我必须更改一些计算。

感谢所有帮助

编辑:

这是我决定在函数内调用 isPrime 之前的 original printPrimes()。此函数仅计算质数并将它们打印到 n.

func printPrimes(upTo n: Int) {
    for x in 1...n {
        var count = 0
        for num in 1..<x {
            if x % num == 0 {
                count += 1
        }

    }
        if count <= 1 {
            print(x)
        }
   }
}

您的第二个例程仅打印两个值,因为它正在调用 isPrime,但从不根据返回值执行任何操作,而是递增 count。并且由于仅当 count<= 1 时才打印,因此只会对 n.

的前两个值发生这种情况

但假设您正在尝试打印不超过某个数字的质数,您可以这样做:

func printPrimes(upTo n: Int) {
    for x in 1...n {
        if isPrime(x) {
            print(x)
        }
    }
}

(按照惯例,在 Swift 中,当我们说“通过 n”时,我们会迭代 1...n,如果有人说“直到 n”,我们会迭代 1..<n。但是因为你的原始代码片段使用 upTo1...n,我会在这里使用它,但请注意这不是与标准 Swift API 模式非常一致。)

不幸的是,isPrime 也不正确。所以你必须先解决这个问题。例如,考虑 25。它不能被 2 或 3 整除,但也不是质数。

如果您查看提供的原始 printPrimes,它实际上做的是说“有多少整数小于 xx 可整除的......如果只能被另一个数整除(即 1),那么它就是一个质数。”这种逻辑虽然效率不高,但却是正确的。您应该继续在 isPrime 例程中使用它。但是那个“能被2或3整除”的逻辑是不正确的。

你可以这样做,在你的 printPrimes 中你可以循环到你想要的数字,然后通过调用带有数字的函数来检查数字是否是质数。但是你必须检查你的 isPrime 函数。你的 printPrimes 应该只做它的名字所说的(打印最多 n 的素数)并且检查数字是否为素数的所有逻辑应该在你的 isPrime 函数中。 在函数上使用 camelCase 也是一个好习惯,您应该将函数重命名为 printPrimes 而不是 PrintPrimes。

func printPrimes(upTo n: Int) {
    for x in 1...n {
        if isPrime(x) {
            print(x)
        }
    }
}