Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XCode游乐场中的递归函数(Swift)_Swift_Recursion - Fatal编程技术网

XCode游乐场中的递归函数(Swift)

XCode游乐场中的递归函数(Swift),swift,recursion,Swift,Recursion,我正在学习Swift中的递归函数,我做了以下工作: func recursive(i: Int) -> Int { if i == 1 { return 1 } else if i >= 2 { return recursive(i: i - 1) + 1 } return 0 } 我不明白为什么上面的函数不起作用。我已经通过执行下面的doingprint(recursive(10))对其进行了测试,这给了我10的输出

我正在学习Swift中的递归函数,我做了以下工作:

func recursive(i: Int) -> Int {
    if i == 1 {
        return 1
    } else if i >= 2 {
        return recursive(i: i - 1) + 1
    }
    return 0
}
我不明白为什么上面的函数不起作用。我已经通过执行下面的doing
print(recursive(10))
对其进行了测试,这给了我10的输出。我期望输出为1。有人能帮我吗?先谢谢你

我正在使用XCode 8.3上的操场。

当您这样做时:

recursive(i: i - 1) + 1
…然后实际上是递减
i
,然后再递增。这就取消了,您再次到达
i

让我们写下将对
i=3进行的计算:

(3 - 1) + 1 = ((2 - 1) + 1) + 1 = (((1) + 1) + 1) = 3

这是一个不使用任何循环打印数字的完美示例

递归函数对于处理此类情况非常有用

func printCount( count : inout Int , limit : Int) {
    
    print(count, terminator: " ")
    count += 1  
    if count  > limit {
        return
    }
    
    printCount(count: &count , limit: limit)
}

var count = 11
let limit = 20
printCount(count: &count , limit: limit)

输出:1113141517181920

递归(10)==10
正确。为什么还需要其他东西?是的,它应该是1,但输出显示为10。是的,因为您在每个递归调用中添加1,并执行9个递归调用–因此1+9=10我的第一条注释中有一个拼写错误(现已修复)<代码>10是正确的输出。实际上,对于所有正整数,
递归(n)==n
。。。。证明人:)谢谢你的解释!在我看来,
+1
只发生过一次,
(i-1)
会一直持续到它达到1为止。我真的把自己弄糊涂了。