觀察以下數列:

\[a_1=1, a_2=1, a_3=2, a_4=3, a_5=5, a_6=8, a_7=13, a_8=21, \dots\]

這是著名的斐波納契數列 (Fibonacci series)。

依據Fibonacci的定義,可嘗試用以下的程式碼來產生該數列的前100項 (迭代做法):

x <- c()
x[1] <- 1
x[2] <- 1
for (i in 3:100) {x[i] <- x[i-1]+x[i-2] }

為了盡量完整顯示每一項的數字,將 digits (有效數字) 設定為 22

options(digits=22)
x
##   [1]                     1                     1                     2
##   [4]                     3                     5                     8
##   [7]                    13                    21                    34
##  [10]                    55                    89                   144
##  [13]                   233                   377                   610
##  [16]                   987                  1597                  2584
##  [19]                  4181                  6765                 10946
##  [22]                 17711                 28657                 46368
##  [25]                 75025                121393                196418
##  [28]                317811                514229                832040
##  [31]               1346269               2178309               3524578
##  [34]               5702887               9227465              14930352
##  [37]              24157817              39088169              63245986
##  [40]             102334155             165580141             267914296
##  [43]             433494437             701408733            1134903170
##  [46]            1836311903            2971215073            4807526976
##  [49]            7778742049           12586269025           20365011074
##  [52]           32951280099           53316291173           86267571272
##  [55]          139583862445          225851433717          365435296162
##  [58]          591286729879          956722026041         1548008755920
##  [61]         2504730781961         4052739537881         6557470319842
##  [64]        10610209857723        17167680177565        27777890035288
##  [67]        44945570212853        72723460248141       117669030460994
##  [70]       190392490709135       308061521170129       498454011879264
##  [73]       806515533049393      1304969544928657      2111485077978050
##  [76]      3416454622906707      5527939700884757      8944394323791464
##  [79]     14472334024676220     23416728348467684     37889062373143904
##  [82]     61305790721611584     99194853094755488    160500643816367072
##  [85]    259695496911122560    420196140727489664    679891637638612224
##  [88]   1100087778366101888   1779979416004713984   2880067194370816000
##  [91]   4660046610375530496   7540113804746346496  12200160415121876992
##  [94]  19740274219868225536  31940434634990100480  51680708854858326016
##  [97]  83621143489848426496 135301852344706760704 218922995834555203584
## [100] 354224848179261997066
for (i in 1:100) {print(x[i])}
## [1] 1
## [1] 1
## [1] 2
## [1] 3
## [1] 5
## [1] 8
## [1] 13
## [1] 21
## [1] 34
## [1] 55
## [1] 89
## [1] 144
## [1] 233
## [1] 377
## [1] 610
## [1] 987
## [1] 1597
## [1] 2584
## [1] 4181
## [1] 6765
## [1] 10946
## [1] 17711
## [1] 28657
## [1] 46368
## [1] 75025
## [1] 121393
## [1] 196418
## [1] 317811
## [1] 514229
## [1] 832040
## [1] 1346269
## [1] 2178309
## [1] 3524578
## [1] 5702887
## [1] 9227465
## [1] 14930352
## [1] 24157817
## [1] 39088169
## [1] 63245986
## [1] 102334155
## [1] 165580141
## [1] 267914296
## [1] 433494437
## [1] 701408733
## [1] 1134903170
## [1] 1836311903
## [1] 2971215073
## [1] 4807526976
## [1] 7778742049
## [1] 12586269025
## [1] 20365011074
## [1] 32951280099
## [1] 53316291173
## [1] 86267571272
## [1] 139583862445
## [1] 225851433717
## [1] 365435296162
## [1] 591286729879
## [1] 956722026041
## [1] 1548008755920
## [1] 2504730781961
## [1] 4052739537881
## [1] 6557470319842
## [1] 10610209857723
## [1] 17167680177565
## [1] 27777890035288
## [1] 44945570212853
## [1] 72723460248141
## [1] 117669030460994
## [1] 190392490709135
## [1] 308061521170129
## [1] 498454011879264
## [1] 806515533049393
## [1] 1304969544928657
## [1] 2111485077978050
## [1] 3416454622906707
## [1] 5527939700884757
## [1] 8944394323791464
## [1] 14472334024676220
## [1] 23416728348467684
## [1] 37889062373143904
## [1] 61305790721611584
## [1] 99194853094755488
## [1] 160500643816367072
## [1] 259695496911122560
## [1] 420196140727489664
## [1] 679891637638612224
## [1] 1100087778366101888
## [1] 1779979416004713984
## [1] 2880067194370816000
## [1] 4660046610375530496
## [1] 7540113804746346496
## [1] 12200160415121876992
## [1] 19740274219868225536
## [1] 31940434634990100480
## [1] 51680708854858326016
## [1] 83621143489848426496
## [1] 135301852344706760704
## [1] 218922995834555203584
## [1] 354224848179261997066

程式亦可使用以下迭代寫法 ( cat 指令,逗號後控制換行)

xx <- c()
x1 <- 1
x2 <- 1
for (i in 3:100) {xx <- x1+x2 ; x2 <- x1 ; x1 <- xx ; cat(xx,"\n")}
## 2 
## 3 
## 5 
## 8 
## 13 
## 21 
## 34 
## 55 
## 89 
## 144 
## 233 
## 377 
## 610 
## 987 
## 1597 
## 2584 
## 4181 
## 6765 
## 10946 
## 17711 
## 28657 
## 46368 
## 75025 
## 121393 
## 196418 
## 317811 
## 514229 
## 832040 
## 1346269 
## 2178309 
## 3524578 
## 5702887 
## 9227465 
## 14930352 
## 24157817 
## 39088169 
## 63245986 
## 102334155 
## 165580141 
## 267914296 
## 433494437 
## 701408733 
## 1134903170 
## 1836311903 
## 2971215073 
## 4807526976 
## 7778742049 
## 12586269025 
## 20365011074 
## 32951280099 
## 53316291173 
## 86267571272 
## 139583862445 
## 225851433717 
## 365435296162 
## 591286729879 
## 956722026041 
## 1548008755920 
## 2504730781961 
## 4052739537881 
## 6557470319842 
## 10610209857723 
## 17167680177565 
## 27777890035288 
## 44945570212853 
## 72723460248141 
## 117669030460994 
## 190392490709135 
## 308061521170129 
## 498454011879264 
## 806515533049393 
## 1304969544928657 
## 2111485077978050 
## 3416454622906707 
## 5527939700884757 
## 8944394323791464 
## 14472334024676220 
## 23416728348467684 
## 37889062373143904 
## 61305790721611584 
## 99194853094755488 
## 160500643816367072 
## 259695496911122560 
## 420196140727489664 
## 679891637638612224 
## 1100087778366101888 
## 1779979416004713984 
## 2880067194370816000 
## 4660046610375530496 
## 7540113804746346496 
## 12200160415121876992 
## 19740274219868225536 
## 31940434634990100480 
## 51680708854858326016 
## 83621143489848426496 
## 135301852344706760704 
## 218922995834555203584 
## 354224848179261997066

計算該數列後項與前項之比值,果然可以得到比值越來越近長與寬的黃金分割比: \[\frac{\sqrt{5}+1}{2} \approx 1.61803399\]

for (i in 1:99) {print(x[i+1]/x[i]) }
## [1] 1
## [1] 2
## [1] 1.5
## [1] 1.666666666666666740682
## [1] 1.600000000000000088818
## [1] 1.625
## [1] 1.615384615384615418776
## [1] 1.619047619047619068766
## [1] 1.617647058823529437888
## [1] 1.618181818181818165669
## [1] 1.617977528089887595542
## [1] 1.618055555555555580227
## [1] 1.618025751072961426758
## [1] 1.61803713527851456
## [1] 1.618032786885245988273
## [1] 1.618034447821681931501
## [1] 1.618033813400125309201
## [1] 1.618034055727554099136
## [1] 1.618033963166706445946
## [1] 1.6180339985218032961
## [1] 1.618033985017357956337
## [1] 1.618033990175597125472
## [1] 1.618033988205324957832
## [1] 1.618033988957902069572
## [1] 1.618033988670443124036
## [1] 1.618033988780242626859
## [1] 1.618033988738303063926
## [1] 1.618033988754322471948
## [1] 1.61803398874820358877
## [1] 1.618033988750540830281
## [1] 1.61803398874964821097
## [1] 1.618033988749989049438
## [1] 1.6180339887498589313
## [1] 1.618033988749908669291
## [1] 1.618033988749889573455
## [1] 1.618033988749896900927
## [1] 1.618033988749894014347
## [1] 1.61803398874989512457
## [1] 1.618033988749894680481
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894680481
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894680481
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894680481
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894680481
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526
## [1] 1.618033988749894902526

或用該數列前項除以後項計算比值,亦可以得到比值越來越近寬與長的黃金分割比: \[\frac{\sqrt{5}-1}{2} \approx 0.61803399\]

for (i in 1:99) {print(x[i]/x[i+1]) }
## [1] 1
## [1] 0.5
## [1] 0.6666666666666666296592
## [1] 0.5999999999999999777955
## [1] 0.625
## [1] 0.6153846153846154187761
## [1] 0.6190476190476190687662
## [1] 0.6176470588235294378876
## [1] 0.6181818181818181656695
## [1] 0.6179775280898875955415
## [1] 0.6180555555555555802272
## [1] 0.6180257510729614267575
## [1] 0.6180371352785145599995
## [1] 0.6180327868852458772508
## [1] 0.6180344478216818204785
## [1] 0.6180338134001251981786
## [1] 0.6180340557275542101578
## [1] 0.6180339631667065569687
## [1] 0.6180339985218034071224
## [1] 0.6180339850173579563375
## [1] 0.6180339901755971254715
## [1] 0.6180339882053250688543
## [1] 0.6180339889579019585497
## [1] 0.6180339886704432350584
## [1] 0.6180339887802427378816
## [1] 0.6180339887383029529033
## [1] 0.6180339887543225829702
## [1] 0.61803398874820358877
## [1] 0.6180339887505408302815
## [1] 0.6180339887496480999474
## [1] 0.6180339887499890494382
## [1] 0.6180339887498588202774
## [1] 0.6180339887499085582689
## [1] 0.6180339887498895734552
## [1] 0.6180339887498969009272
## [1] 0.6180339887498941253696
## [1] 0.6180339887498951245703
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498949025257
## [1] 0.6180339887498947915034
## [1] 0.6180339887498947915034
## [1] 0.6180339887498947915034

(補充: Fibonacci series 遞迴做法)

fibo <- function(i)
{
if (i == 1 | i == 2)
return(1)
return(fibo(i-1) + fibo(i-2))
}
# fibo(100) 只求第十項
for (i in 1:10)
{cat(i, "th terms =",fibo(i),"\n")}
## 1 th terms = 1 
## 2 th terms = 1 
## 3 th terms = 2 
## 4 th terms = 3 
## 5 th terms = 5 
## 6 th terms = 8 
## 7 th terms = 13 
## 8 th terms = 21 
## 9 th terms = 34 
## 10 th terms = 55

觀察以下數列,尋求規律性,並試著考慮如何計算其第 n 項:

\[a_1=1, a_2=3, a_3=7, a_4=15, a_5=31, a_6=63, \dots\]

\[a_1=2, a_2=3, a_3=5, a_4=9, a_5=17, a_6=33, \dots\]

\[a_1=1, a_2=1, a_3=1, a_4=3, a_5=5, a_6=9, a_7=17, a_8=31, \dots\]

最後一個數列的提示:

x <- c()
x[1] <- 1
x[2] <- 1
x[3] <- 1
for (i in 4:50) {x[i] <- x[i-3]+x[i-2]+x[i-1]}
options(digits=22)
x
##  [1]             1             1             1             3             5
##  [6]             9            17            31            57           105
## [11]           193           355           653          1201          2209
## [16]          4063          7473         13745         25281         46499
## [21]         85525        157305        289329        532159        978793
## [26]       1800281       3311233       6090307      11201821      20603361
## [31]      37895489      69700671     128199521     235795681     433695873
## [36]     797691075    1467182629    2698569577    4963443281    9129195487
## [41]   16791208345   30883847113   56804250945  104479306403  192167404461
## [46]  353450961809  650097672673 1195716038943 2199264673425 4045078385041
for (i in 1:49) {print(x[i+1]/x[i]) }
## [1] 1
## [1] 1
## [1] 3
## [1] 1.666666666666666740682
## [1] 1.800000000000000044409
## [1] 1.888888888888888839546
## [1] 1.823529411764705843169
## [1] 1.83870967741935475992
## [1] 1.842105263157894690096
## [1] 1.838095238095238004306
## [1] 1.839378238341969007408
## [1] 1.839436619718309851024
## [1] 1.83920367534456352665
## [1] 1.839300582847626985838
## [1] 1.839293798098687204856
## [1] 1.839281319222249466705
## [1] 1.839288103840492460961
## [1] 1.839287013459439901197
## [1] 1.839286420632095353511
## [1] 1.839286866384223229076
## [1] 1.839286758257819398565
## [1] 1.839286735958806096036
## [1] 1.83928676351143516321
## [1] 1.839286754522614586449
## [1] 1.839286754196239659365
## [1] 1.839286755789790506199
## [1] 1.839286755115088656254
## [1] 1.839286755166857689758
## [1] 1.839286755251668514788
## [1] 1.839286755204648349249
## [1] 1.83928675521247386726
## [1] 1.839286755216459789963
## [1] 1.839286755213383361962
## [1] 1.839286755214146529269
## [1] 1.839286755214292856664
## [1] 1.839286755214103452616
## [1] 1.839286755214166291239
## [1] 1.839286755214168067596
## [1] 1.83928675521415718741
## [1] 1.839286755214161850347
## [1] 1.839286755214161406258
## [1] 1.839286755214160962169
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213
## [1] 1.839286755214161184213

(補充: 遞迴做法)

x1 <- function(i)
{
if (i == 1 | i == 2 | i==3)
return(1)
return(x1(i-3) + x1(i-2) +x1(i-1))
}
# x1(10) 只求第十項
for (i in 1:10)
{cat(i, "th terms =",x1(i),"\n")}
## 1 th terms = 1 
## 2 th terms = 1 
## 3 th terms = 1 
## 4 th terms = 3 
## 5 th terms = 5 
## 6 th terms = 9 
## 7 th terms = 17 
## 8 th terms = 31 
## 9 th terms = 57 
## 10 th terms = 105

Out of suffering have emerged the strongest souls.

苦難中方能湧現最堅強的靈魂。