iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

上集解答

fun c2f(c:Int):Double{
    var f =c.toDouble() * 9/5 + 32
    return f
}

要記得轉成double再做浮點數運算喔。


遞迴

今天教的比起說是語法,其實更像是演算法了。

遞迴相信大家在高中也曾經聽過,我們這裡的遞迴的確跟高中的遞迴關係式感覺很像,最簡單來說呢,遞迴就是自己呼叫自己。

https://ithelp.ithome.com.tw/upload/images/20220929/20133574JxGpUbGBLx.png

google也有一個跟遞迴很關的小彩蛋,那就是你搜尋遞迴他會這樣顯示。

https://ithelp.ithome.com.tw/upload/images/20220929/20133574Mt7ujAo8ab.png

不過程式遞迴跟數學的遞迴一樣,你需要設定一個終止的點,來讓遞迴停止,不然會導致無限遞迴最後程式壞掉。

我們直接拿費式數列舉例好了,他的終止點就在當為1、2的時候回傳1,其他情況才回傳前面兩項相加,我們來試做看看。

fun fibonacci(n:Int):Int{
    if(n==1 || n==2){
        return 1
    }
    else{
        return fibonacci(n-1) + fibonacci(n-2)
    }
}

PS. 上一集忘記提到,函式的參數他不是 var 而是 val 喔,所以那個是不能被改變的變數。

課堂練習

其實遞迴不只可以做到這種東西,後面包括 dfs 也都會用到遞迴的概念,所以我們來練習看看吧。

你聽過考拉茲猜想嗎?這是數學界還未被證明的猜想之一喔,你可以試試看能不能證明,如果可以證明會有一筆豐厚的獎金。

簡單來說,就是當一個數字是偶數,我們就除以二,如果是奇數,我們就乘三再加一,然後不斷重複,是否到最後可以變成1。

比如6的過程就是,6, 3, 10, 5, 16, 8, 4, 2, 1。

我們今天的目標是實作考拉茲猜想,設計一個函式collatz,參數n代表現在的值,回傳值為布林值,代表最後能不能變成1。


上一篇
[Day13][語法]函式
下一篇
[Day15][語法]物件
系列文
櫛風風的「完全不會寫程式,從零開始的 Kotlin 教學」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言