→ bibo9901: 通常費式數列是定義, 不是用觀察的orz 08/22 00:32
→ bibo9901: 氏 08/22 00:33
你說的沒錯的沒錯,中間舉例簡單例子的時候我應該多做說明一下
假設特例的部份解決了,目前函數的樣子是
function fib(n)
{
if( n == 0 ) return 0;
if( n == 1 ) return 1;
}
接下來 n = 2 的情況
根據定義要推寫出 fib(2) 應該可以寫成 fib(1) + fib(0)
接下來根據fib(2) = fib(1) + fib(0) 思考要如何改寫原函數來滿足這個關係
function fib(n)
{
if( n == 0 ) return 0;
if( n == 1 ) return 1;
//下面需要 return 的結果是 fib(2)
//也就是說 n = 2 帶入的話,會是return fib(1) + fib(0)
//至於要怎麼寫出來就需要多一點練習了
return fib(n-1) + fib(n-2);
}
函數到這裡其實已經完成了
寫遞迴的時候,如果遞迴關係正確,
只要寫出特例跟最簡單的一般例就結束了。
例一個數學上的例子是階乘 n!
其實只要寫出 n = 0 的特例,以及用 n = 0 來表示 n = 1 的情況
其他情況也都會被一併解決。
推 CoNsTaR: 遞迴特例通常都是極端 08/22 01:18
推 frouscy: 找pure functional language來練正解XD 08/22 02:09
→ frouscy: 特別是大部份functional langauge有pattern matching 08/22 02:10
→ frouscy: 用pattern matching可讀性常常比用if-else來得高 08/22 02:12
pattern matching 可讀性真的好許多
※ 編輯: ljred (36.231.31.147), 08/22/2016 08:22:52
→ dnabossking: 是說,各位的離散數學都沒教 Recurrence Relations? 08/22 12:57