递归函数
问题描述:
我学习递归函数的斯威夫特,我做了以下内容:递归函数
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。
答
当你这样做:
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为止。我真的很困惑自己。 –
'递归(10)== 10'是正确的。你为什么期望别的东西? –
是的,它应该是1,但输出显示为10. –
嗯,是的,因为你在每次递归调用时加1,并且做了9次递归调用 - 所以1 + 9 = 10 – Hamish