在Swift中,在函數中還能夠調用函數,從而造成嵌套調用。嵌套調用的形式每每有兩種:一種是在一個函數中調用其餘函數;另外一種是在一個函數中調用自身函數。如下將對這兩種調用進行詳細講解。算法
嵌套調用是指在函數中能夠調用其餘函數。調用方式如圖7.4所示。函數
圖7.4 函數嵌套的形式spa
【示例7-25】如下將使用函數的嵌套調用實現對s = 22! + 32!的計算。代碼以下:orm
import Foundation教程
func f1(p:Int)->Int{遞歸
var k:Intit
var r:Intio
k=p*p //求平方入門
r=f2(k) //調用函數f2(),計算階乘import
return r //獲取平方後階乘的值
}
//求階乘
func f2(q:Int)->Int{
var c:Int=1
var i:Int
for i=1;i<=q;++i{
c=c*i
}
return c; //獲取階乘的值
}
var i:Int
var s:Int=0
for i=2;i<=3;i++ {
s=s+f1(i);
}
print("s=\(s)")
在此代碼中,前後先計算22!這個數值,即調用f1()函數,計算22,結果爲4,而後在調用f2()函數,對4的階乘求取,計算完成22!後,將結果賦值給s,而後再計算32!的結果,過程和求22!是同樣的,最後再將計算的結果與s進行相加。運行結果以下所示:
s=362904
遞歸調用是嵌套調用的一種特殊狀況,它也能夠被稱爲遞歸。它在調用函數的過程當中調用了該函數自己。「從前有座山,山上有座廟,廟裏有個老和尚在給小和尚講故事,講的什麼呢?從前有座山,山上有......」這是一個典型的遞歸,能夠無限制的循環下去。可是在Swift語言中遞歸必需要有一個知足結束的條件。遞歸調用的形式如圖7.5所示。
圖7.5 遞歸調用
【示例7-26】如下將經過遞歸調用實現求第6我的的年齡問題。第6我的說他比第5我的大3歲,第5我的說他比第4我的大3歲,第4我的說他比第3我的大3歲,依次類推,到達最後一我的時他說本身是13歲。代碼以下:
import Foundation
//求年齡
func calculatedage(n:Int)->Int{
var x:Int
if n==1{
x=13
}else{
x=calculatedage(n-1)+3 //實現遞歸
}
return x
}
let age=calculatedage(6)
print(age)
它的調用流程如圖7.6所示。
圖7.6 執行流圖
在當遞歸調用知足必定條件後結束遞歸調用,此時x=13,即calculatedage(1)爲13;調用calculatedage(1)+3實現第2我的年齡的計算,calculatedage(2)爲16,依次類型,最後實現calculatedage(6)年齡的計算。運行結果以下所示:
28
注意:在編寫遞歸的實現須要注意如下2點
q 找到正確的遞歸算法
q 要肯定遞歸算法的結束條件,這是決定遞歸程序是否能夠正常結束的關鍵。
本文選自:Swift2.0語言快速入門v3.0 大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!