在@H_419_6@Swift@H_419_6@中,在函数中还可以调用函数,从而形成嵌套调用。嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数;另一种是在一个函数中调用自身函数。以下将对这两种调用进行详细讲解。@H_419_6@
Swift2.0语言嵌套调用基本形式@H_419_6@嵌套调用是指在函数中可以调用其他函数。调用方式如图@H_419_6@7.4@H_419_6@所示。@H_419_6@
@H_419_6@
图@H_419_6@7.4@H_419_6@函数嵌套的形式@H_419_6@
【示例@H_419_6@7-25@H_419_6@】以下将使用函数的嵌套调用实现对@H_419_6@s = 22! + 32!@H_419_6@的计算。代码如下:@H_419_6@
import Foundation
func f1(p:Int)->Int{
var k:Int
var r:Int
k=P*p //@H_419_6@求平方@H_419_6@
r=f2(k) //@H_419_6@调用函数@H_419_6@f2()@H_419_6@,计算阶乘@H_419_6@
return r //@H_419_6@获取平方后阶乘的值@H_419_6@
}
//@H_419_6@求阶乘@H_419_6@
func f2(q:Int)->Int{
var c:Int=1
var i:Int
for i=1;i<=q;++i{
c=c*i
}
return c; //@H_419_6@获取阶乘的值@H_419_6@
}
var i:Int
var s:Int=0
for i=2;i<=3;i++ {
s=s+f1(i);@H_419_6@
}
print("s=\(s)")
在此代码中,先后先计算@H_419_6@22!@H_419_6@这个数值,即调用@H_419_6@f1()@H_419_6@函数,计算@H_419_6@22@H_419_6@,结果为@H_419_6@4@H_419_6@,然后在调用@H_419_6@f2()@H_419_6@函数,对@H_419_6@4@H_419_6@的阶乘求取,计算完成@H_419_6@22!@H_419_6@后,将结果赋值给@H_419_6@s@H_419_6@,然后再计算@H_419_6@32!@H_419_6@的结果,过程和求@H_419_6@22!@H_419_6@是一样的,最后再将计算的结果与@H_419_6@s@H_419_6@进行相加。运行结果如下所示:@H_419_6@
s=362904@H_419_6@@H_419_6@
Swift2.0语言的递归调用@H_419_6@递归调用是嵌套调用的一种特殊情况,它也可以被称为递归。它在调用函数的过程中调用了该函数本身。“从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事,讲的什么呢?从前有座山,山上有@H_419_6@......@H_419_6@”这是一个典型的递归,可以无限制的循环下去。但是在@H_419_6@Swift@H_419_6@语言中递归必须要有一个满足结束的条件。递归调用的形式如图@H_419_6@7.5@H_419_6@所示。@H_419_6@
图@H_419_6@7.5@H_419_6@递归调用@H_419_6@
【示例@H_419_6@7-26@H_419_6@】以下将通过递归调用实现求第@H_419_6@6@H_419_6@个人的年龄问题。第@H_419_6@6@H_419_6@个人说他比第@H_419_6@5@H_419_6@个人大@H_419_6@3@H_419_6@岁,第@H_419_6@5@H_419_6@个人说他比第@H_419_6@4@H_419_6@个人大@H_419_6@3@H_419_6@岁,第@H_419_6@4@H_419_6@个人说他比第@H_419_6@3@H_419_6@个人大@H_419_6@3@H_419_6@岁,依次类推,到达最后一个人时他说自己是@H_419_6@13@H_419_6@岁。代码如下:@H_419_6@
import Foundation
//@H_419_6@求年龄@H_419_6@
func calculatedage(n:Int)->Int{
var x:Int@H_419_6@
if n==1{@H_419_6@@H_419_6@
x=13@H_419_6@@H_419_6@
}else{@H_419_6@@H_419_6@
x=calculatedage(n-1)+3 //@H_419_6@实现递归@H_419_6@@H_419_6@
}@H_419_6@@H_419_6@
return x@H_419_6@@H_419_6@
}
let age=calculatedage(6)@H_419_6@@H_419_6@
print(age)
它的调用流程如图@H_419_6@7.6@H_419_6@所示。@H_419_6@
@H_419_6@
图@H_419_6@7.6@H_419_6@执行流图@H_419_6@
在当递归调用满足一定条件后结束递归调用,此时@H_419_6@x=13@H_419_6@,即@H_419_6@calculatedage(1)@H_419_6@为@H_419_6@13@H_419_6@;调用@H_419_6@calculatedage(1)+3@H_419_6@实现第@H_419_6@2@H_419_6@个人年龄的计算,@H_419_6@calculatedage(2)@H_419_6@为@H_419_6@16@H_419_6@,依次类型,最后实现@H_419_6@calculatedage(6)@H_419_6@年龄的计算。运行结果如下所示:@H_419_6@
28@H_419_6@@H_419_6@注意:在编写递归的实现需要注意以下@H_419_6@2@H_419_6@点@H_419_6@
q@H_419_6@@H_419_6@找到正确的递归算法@H_419_6@
q@H_419_6@@H_419_6@要确定递归算法的结束条件,这是决定递归程序是否可以正常结束的关键。@H_419_6@
本文选自:@H_419_6@Swift2.0语言快速入门v3.0大学霸内部资料,转载请注明出处,尊重技术尊重IT人!@H_419_6@
总结以上是内存溢出为你收集整理的Swift2.0语言教程之函数嵌套调用形式全部内容,希望文章能够帮你解决Swift2.0语言教程之函数嵌套调用形式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)