java 實(shí)現(xiàn)黃金分割數(shù)的示例詳解
黃金分割數(shù) 0.618 與美學(xué)有重要的關(guān)系。舞臺上報(bào)幕員所站的位置大約就是舞臺寬度的 0.618 處,
墻上的畫像一般也掛在房間高度的 0.618 處,甚至股票的波動據(jù)說也能找到 0.618 的影子…
黃金分割數(shù)是個無理數(shù),也就是無法表示為兩個整數(shù)的比值。
0.618 只是它的近似值,其真值可以通過對 5 開方減去 1 再除以 2 來獲得,
我們?nèi)∷囊粋€較精確的近似值:0.618034
有趣的是,一些簡單的數(shù)列中也會包含這個無理數(shù),這很令數(shù)學(xué)家震驚!
1 3 4 7 11 18 29 47 … 稱為“魯卡斯隊(duì)列”。它后面的每一個項(xiàng)都是前邊兩項(xiàng)的和。
如果觀察前后兩項(xiàng)的比值,即:1/3,3/4,4/7,7/11,11/18 … 會發(fā)現(xiàn)它越來越接近于黃金分割數(shù)!
你的任務(wù)就是計(jì)算出從哪一項(xiàng)開始,這個比值四舍五入后已經(jīng)達(dá)到了與 0.618034 一致的精度。
請寫出該比值。格式是:分子/分母。比如:29/47
/* */ package Question40_49; public class Question44 { public static void main(String[] args) { int a=1,b=3,t; while(true){ if(Math.abs((double)a/b-0.618034)<0.000001){ System.out.println(a+"/"+b+" = "+(double)a/b); break; } t=a; a=b; b+=t; } } }
運(yùn)行結(jié)果:
1364/2207
補(bǔ)充:費(fèi)波那契數(shù)列java兩種實(shí)現(xiàn)+逼近黃金分割率功能
費(fèi)波那契數(shù)列的簡單實(shí)現(xiàn),這是常見的遞歸問題,但實(shí)現(xiàn)的方法有很多種,當(dāng)然算法肯定要簡單高效的了,
網(wǎng)上那些遞歸算法總覺得不好看,所以我自己就寫了下面這個程序,畢竟算法是根據(jù)問題出來的,遇到不會的問題還是有自己的想法比較好,特別是算法這方面的。
package test; import java.text.DecimalFormat; import java.util.Arrays; //兩種方法打印個數(shù)為n的斐波那契數(shù)列 public class Fibonacci { //不借助工具容器的數(shù)學(xué)計(jì)算,當(dāng)增加的功能越來越多時,簡潔性和可讀性都會大大降低 // n為需要顯示的數(shù)列個數(shù) (注:僅顯示int值范圍類數(shù)列,大概能顯示45個) protected void way1(int n) { int n1 = 1; int n2 = 1; int count = 0; String string = new String(1+"\t"+1+"\t"); if(n == 1) { System.out.println("1"); } //可顯示n為1開始的任何數(shù)的數(shù)列 while( count != n/2 -1 ) { n1 += n2; string += Integer.toString(n1)+"\t"; n2 += n1; string += Integer.toString(n2)+"\t"; count ++; } if (n%2!=0) { n1 = n1 + n2; string += Integer.toString(n1)+"\t"; } System.out.println(string); } //借助數(shù)組的迭代實(shí)現(xiàn),有很好的可讀性,同時十分簡潔,在后續(xù)功能增加的情況下也不復(fù)雜 //比如這里增加一個功能,求黃金分割率,要用上面的實(shí)現(xiàn)的話,那代碼就太亂了 protected void way2(int n) { int[] fbci =new int [n]; double[] goldindex = new double[n-1]; fbci[0] = 1; fbci[1] = 1; goldindex[0] = 1.00; for (int i = 2; i < fbci.length; i++) { fbci[i] = fbci[i-1] + fbci[i-2]; } DecimalFormat dFormat = new DecimalFormat("0.000000");//控制小數(shù)位數(shù),可取消該功能 String result = new String(); for (int i = 1; i < goldindex.length; i++) { goldindex [i] = (double)(fbci[i])/(double)(fbci[i+1]); result += dFormat.format(goldindex [i])+"\t"; } System.out.println(Arrays.toString(fbci)); System.out.println(result); } public static void main(String[] args) { // TODO Auto-generated method stub Fibonacci a1 = new Fibonacci(); a1.way1(15); a1.way2(15); } }
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
0.500000 0.666667 0.600000 0.625000 0.615385 0.619048 0.617647 0.618182 0.617978 0.618056 0.618026 0.618037 0.618033
補(bǔ)充:JAVA中黃金分割點(diǎn)的問題
描述:
尋找某兩個數(shù)相除,其結(jié)果 離黃金分割點(diǎn) 0.618最近
(1)分母和分子不能同時為偶數(shù)
(2)分母和分子 取值范圍在[1-20
/** * <p>Title: Excise1</p> * <p>Description: 黃金分割點(diǎn) </p> * 描述:尋找某兩個數(shù)相除,其結(jié)果 離黃金分割點(diǎn) 0.618最近 * (1)分母和分子不能同時為偶數(shù) (2)分母和分子 取值范圍在[1-20] * @author Mr.chen * @date 2018年8月22日 */ public class Excise1 { public static void main(String[] args) { int A = 0; //A 比較后傳出來的新分子 int B=1; //B 比較后傳出的新分母 double c=0,C=1; //C 比較后傳出來的新a/b的值 for(int a=1;a<21;a++) { //循環(huán)分子 for(int b=1;b<21;b++) { //循環(huán)分母 if(a%2==0&b%2==0) //如果兩個同時為偶數(shù)是跳出 continue; c=(double)a/b; //計(jì)算a/b的值并且 強(qiáng)制轉(zhuǎn)化類型 賦值給c if(Math.abs(c-0.618)<Math.abs(C-0.618)) { //如果通過math函數(shù)調(diào)用.abs()方 法;取方法內(nèi)參數(shù)的絕對值 C=c; //通過畫x坐標(biāo)軸 如果算出來的值小于一開始設(shè)定的(大C-0.168)就證 // 明距離0.168左邊的距離比右邊的短 所以賦值給大C 并且再次循環(huán) //目的使得通過循環(huán)讓分子和分母的比值越來越趨近于0.168 A=a; //將合適的分子a賦給一開始設(shè)定好的A B=b; //將合適的分母b賦給一開始設(shè)定好的B } } } System.out.println("離黃金分割點(diǎn)(0.618)最近的兩個數(shù)相除是:"+A+"/"+B+"="+C); //將傳給A B 的值輸出來 } }
對于小白的我來說這個邏輯是真的屌?。。。。。。。。。。?!
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
mybatis-plus分頁查詢?nèi)N方法小結(jié)
本文主要介紹了mybatis-plus分頁查詢?nèi)N方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05在SpringBoot項(xiàng)目中如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控
Spring Boot因其簡便、高效的特點(diǎn)廣受開發(fā)者喜愛,在復(fù)雜的業(yè)務(wù)場景下,如何確保Spring Boot應(yīng)用的高性能和穩(wěn)定性成為了一個關(guān)鍵問題,其中,線程池的管理策略直接影響到系統(tǒng)的吞吐量和資源利用效率,本文將重點(diǎn)探討在Spring Boot項(xiàng)目中,如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控2023-10-10通過簡單方法實(shí)現(xiàn)spring boot web項(xiàng)目
這篇文章主要介紹了通過簡單方法實(shí)現(xiàn)spring boot web項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09spring cloud學(xué)習(xí)教程之config修改配置詳解
這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)教程之config修改配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09