2017-04-08 202 views
0

我学习递归函数的斯威夫特,我做了以下内容:递归函数

func recursive(i: Int) -> Int { 
    if i == 1 { 
     return 1 
    } else if i >= 2 { 
     return recursive(i: i - 1) + 1 
    } 
    return 0 
} 

我无法弄清楚,为什么上面的功能无法正常工作。我已经通过执行下面的测试print(recursive(10)),它给了我一个输出10.我预计输出为1.任何人都可以帮助我吗?先谢谢你。

我在XCode 8.3上使用Playgrounds。

+0

'递归(10)== 10'是正确的。你为什么期望别的东西? –

+0

是的,它应该是1,但输出显示为10. –

+0

嗯,是的,因为你在每次递归调用时加1,并且做了9次递归调用 - 所以1 + 9 = 10 – Hamish

回答

0

当你这样做:

recursive(i: i - 1) + 1 

,那你就是在效果递减i,然后再增加了。这消除了,你再次到达i

让我们写下的计算会为i = 3来完成:

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

感谢您的解释!在我看来,'+ 1'只发生过一次,'(i - 1)'会持续发展,直到达到1为止。我真的很困惑自己。 –