尾调用的重要性在于它可以不在调用栈上面添加一个新的堆栈帧——而是更新它,如同迭代一般。
尾递归因而具有两个特征: 调用自身函数(Self-called); 计算仅占用常量栈空间(Stack Space)。
kotlin
1. 求和
1.1
tailrec fun ad(n:Int,result:Int=0):Int{ if(n==1) return result+1else return ad(n-1,result+n) } fun main(args: Array<String>) { println(ad(100))
}
1.2
tailrec fun add(n:Int,result:Int):Int{ if(n==0) return result else return add(n-1,result+n) } fun main(args: Array<String>) { println(add(100,0)) }
2.Fibonacci斐波那契数列
2.1
fun main(args: Array<String>) { tailrec fun f(n:Int, pf:Int=1,ps: Int=1):Int{ if(n<=1) return pf else return f(n-1,ps,pf+ps) } println(f(10)) }
2.2
tailrec fun fcnq(n:Int, pf:Int,ps: Int):Int{if(n<=1) return pfelse return fcnq(n-1,ps,pf+ps) } fun main(args: Array<String>) { println(fcnq(10,1,1)) }
作者:证始
链接:https://www.jianshu.com/p/400c87a8c632
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦