學習軌道
/
Elixir
Elixir
/
練習
/
鳥類計數
鳥類計數

鳥類計數

學習練習

簡介

遞迴

遞迴函式就是會呼叫自己的函式。

一個遞迴函式至少需要一個_基本情況_和一個_遞迴情況_。

_基本情況_會回傳一個值,而不會再次呼叫函式。_遞迴情況_則會再次呼叫函式,並修改輸入,讓它在某個時間點符合基本情況。

很多時候,每種情況會寫在各自的函式子句裡。

# base case
def count([]), do: 0

# recursive case
def count([_head | tail]), do: 1 + count(tail)

說明

你是一位熱衷的賞鳥人士,每天都會記錄有多少隻鳥造訪你的花園。

你決定把賞鳥提升到新的層次,實作幾個工具來協助你追蹤並處理這些資料。

你選擇將資料儲存為整數的陣列。陣列中的第一個數字是今天造訪花園的鳥數,第二個是昨天的,以此類推。

1. 查看今天有多少隻鳥造訪

實作 BirdCount.today/1 函式。它應該接收每日鳥數的陣列,並回傳今天的鳥數。如果陣列是空的,它應該回傳 nil。

BirdCount.today([2, 5, 1])
# => 2

2. 增加今天的計數

實作 BirdCount.increment_day_count/1 函式。它應該接收每日鳥數的陣列,並將今天的鳥數增加 1。如果陣列是空的,回傳 [1]。

BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]

3. 確認是否有某一天沒有鳥造訪

實作 BirdCount.has_day_without_birds?/1 函式。它應該接收每日鳥數的陣列。如果至少有一天沒有鳥造訪花園,它應該回傳 true,否則回傳 false。

BirdCount.has_day_without_birds?([2, 0, 4])
# => true

BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false

4. 計算造訪鳥數的總數

實作 BirdCount.total/1 函式。它應該接收每日鳥數的陣列,並回傳從你開始收集資料以來造訪花園的鳥數總和。

BirdCount.total([4, 0, 9, 0, 5])
# => 18

5. 計算忙碌的天數

有些日子比其他日子忙碌。忙碌的一天是指有五隻或更多的鳥造訪你的花園。

實作 BirdCount.busy_days/1 函式。它應該接收每日鳥數的陣列,並回傳忙碌的天數。

BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 鳥類計數 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。