觀察以下數列:
\[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