国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - java實現(xiàn)斐波那契數(shù)列的3種方法

java實現(xiàn)斐波那契數(shù)列的3種方法

2019-10-30 17:13java教程網(wǎng) JAVA教程

這篇文章主要介紹了java實現(xiàn)斐波那契數(shù)列的3種方法,有需要的朋友可以參考一下

先說說為什么寫這個吧,這個完全是由去阿里巴巴面試引起的一次慘目忍睹的血案。去面試的時候,由于面試前天晚上11點鐘才到阿里巴巴指定面試城市,找到旅館住下基本都1點多,加上晚上完全沒有睡好,直接導致第二天面試效果很不好(對于那些正在找工作的大蝦們不要向小蝦一下悲劇,提前做好準備還是很重要滴),面試大概進行了一個多小時(面試結(jié)束回去的時候基本走路都快睡著了,悲催!!),面試快結(jié)束的時候面試官問的我問題就是關于費波那西數(shù)列,當時頭腦完全漿糊,只知道要設置三個變量或者用List先初始化,當寫到for循環(huán)的時候,腦袋簡直漿糊的不能再漿糊了,沒寫出來,最后只能在面試官的步步誘導下寫出了下面的第一種方式,很不應該呀;從現(xiàn)在來看阿里只是把粗枝大葉的把整個應用的框架搭建起來了,真是變革、挖金的黃金期(有能力的大蝦趕緊去),畢竟阿里巴巴手中99%的數(shù)據(jù)都是重要數(shù)據(jù)而向百度這類的主推搜索的巨頭99%數(shù)據(jù)都是垃圾相比,對于數(shù)據(jù)分析來說,阿里更能通過對手中掌握的多種多樣的用戶詳細數(shù)據(jù)進行分析,更能精確定位用戶的品味及需求,為精確推送和精準廣告推送提供更好的服務。如果說騰訊未來的夢想是做用戶生活中的水電氣的話,那阿里可能實現(xiàn)的未來夢想就是用戶的衣食住行外加代收水電氣等等,O(∩_∩)O~還是轉(zhuǎn)入正題吧。
   對于優(yōu)秀的算法設計員來說,在程序功能主體實現(xiàn)的基礎上無非關心兩個東西,一個設計算法的時間復雜度,一個是空間復雜度(說白了就是執(zhí)行一個程序所用的時間和占用的內(nèi)存空間);在根據(jù)不同的應用場景的基礎上,一般充滿智慧的算法設計師會在時間和空間兩個相對矛盾的資源中尋求到平衡點,如實時性要求高的系統(tǒng)一般會以空間資源換取時間或者對于常用到的對象一般會常駐內(nèi)存以提高響應時間(緩存技術和現(xiàn)在比較流行NoSQL中大多是內(nèi)存數(shù)據(jù)庫都是如此),對于內(nèi)存資源比較寶貴的嵌入式系統(tǒng)而言一般會以時間上的延遲來換取時間。
下面從費波那西數(shù)列三個實現(xiàn)上來說說,怎么才能真正設計出真正符合實際應用場景的優(yōu)秀算法
首先說說費波那西數(shù)列:
從文字上說,費波那西數(shù)列由0和1開始,之后的費波那西系數(shù)就由之前的兩數(shù)相加,數(shù)列形式如下:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,………………
在數(shù)學上,是以遞歸的方法來定義:
F_0=0
F_1=1
F_n = F_{n-1}+ F_{n-2}

實現(xiàn)需求:輸入序號n返回得到對應費波那西數(shù)
程序?qū)崿F(xiàn)1——函數(shù)自迭代

 

復制代碼代碼如下:

/**
  * 函數(shù)自迭代
  * @Title: fnType1
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int 
  * @throws Exception
  */
 public int fnType1(int n)throws Exception{
  if(n==0){
   return 0;
  }else if(n==1||n==2){
   return 1;
  }else if(n>2){
   int temp=fnType1(n-1)+fnType1(n-2);
   if(temp<0){
    throw new Exception("Invalid value for int type, too larage");
   }else{
    return temp;
   }
  }else{
   throw new Exception("IllegalArgument value for n,please enter n>=0 ");
  }
 } 

 

此種方式缺點:大量迭代不斷消耗棧空間(搞web開發(fā)調(diào)試維護的都應該知道服務器棧資源的可貴,如果大量并發(fā)調(diào)用迭代導致服務器棧資源遲遲得不到回收,而導致web服務器崩潰),效率底,函數(shù)自閉性比較弱(優(yōu)秀的接口應該對輸入輸出可能出現(xiàn)的錯誤信息進行捕捉,并提供清楚明了的處理結(jié)果),很容易出現(xiàn)錯誤,調(diào)試困難,實際應用中一般不建議使用這種方式,使用時迭代次數(shù)也不能超過3次;
程序?qū)崿F(xiàn)2——時間換空間

復制代碼代碼如下:

/**
  * 時間換空間
  * @Title: fnType2
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int (n<0 return -1,beyond max int size return -2)
  * @throws
  */
 public int fnType2(int n){
  int result=-1;
  int temp1=0;
  int temp2=1;
  for(int index=0;index<=n;index++){
   if(index==0){
    result=temp1;
   }else if(index==1){
    result=temp2;
   }else{
    result=temp1+temp2;
    if(result<0){
     result=-2;
     break;
    }
    temp1=temp2;
    temp2=result;
   }
  }
  return result;
 }

 

此方法主要使用于:使用場景一:對于對象或變量使用次數(shù)比較少,使用一次以后就不會再使用的場景;使用場景二:對于內(nèi)存資源比較稀缺的實時性要求不是太高的嵌入式系統(tǒng)設計中多會采用此種方式;
程序?qū)崿F(xiàn)3——空間換取時間

 

復制代碼代碼如下:

 private static List<Integer> fnData=new ArrayList<Integer>();
 private static final int maxSize=50000;
 /**
  * 初始化器
  * @Title: setFnData
  * @Description: TODO
  * @param     
  * @return void
  * @throws
  */
 private static  void setFnData(){
  int result=-1;
  int temp1=0;
  int temp2=1;
  for(int index=0;index<=maxSize;index++){
   if(index==0){
    result=temp1;
   }else if(index==1){
    result=temp2;
   }else{
    result=temp1+temp2;
    if(result<0){
     result=-2;
     break;
    }
    temp1=temp2;
    temp2=result;
   }
   fnData.add(result);
  }
 }
 /**
  * 對外接口
  * @Title: getFnData
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int <span style="font-family: sans-serif;">(n beyond fnData.size() and n<0 return -1)</span>
  * @throws
  */
 public int getFnData(int n){
  if(fnData.size()==0){
   setFnData();
  }
  if(fnData.size()>n&&n>=0){
   return fnData.get(n);
  }else{
   return -1;
  }
 }

 

此方法一般用于:對象或變量在程序運行的整個生命周期都存在或頻繁調(diào)用的場景,如調(diào)用外部WebService接口、抽象持續(xù)化層、常用配置文件參數(shù)加載等等
測試用例:

復制代碼代碼如下:


package com.dbc.yangg.swing.test;

 

import java.util.ArrayList;
import java.util.List;

/**
 * 輸入序號n返回得到對應費波那西數(shù)
 * @ClassName: Init
 * @Description: TODO
 * @author guoyang2011@gmail.com
 * @date 2014年1月10日 下午7:52:13
 *
 */
public class Init {
 /**
  * 函數(shù)自迭代
  * @Title: fnType1
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int 
  * @throws Exception
  */
 public int fnType1(int n)throws Exception{
  if(n==0){
   return 0;
  }else if(n==1||n==2){
   return 1;
  }else if(n>2){
   int temp=fnType1(n-1)+fnType1(n-2);
   if(temp<0){
    throw new Exception("Invalid value for int type, too larage");
   }else{
    return temp;
   }
  }else{
   throw new Exception("IllegalArgument value for n,please enter n>=0 ");
  }
 } 
 /**
  * 時間換空間
  * @Title: fnType2
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int (n<0 return -1,beyond max int size return -2)
  * @throws
  */
 public int fnType2(int n){
  int result=-1;
  int temp1=0;
  int temp2=1;
  for(int index=0;index<=n;index++){
   if(index==0){
    result=temp1;
   }else if(index==1){
    result=temp2;
   }else{
    result=temp1+temp2;
    if(result<0){
     result=-2;
     break;
    }
    temp1=temp2;
    temp2=result;
   }
  }
  return result;
 }
 private static List<Integer> fnData=new ArrayList<Integer>();
 private static final int maxSize=50000;
 /**
  * 空間換時間
  * @Title: setFnData
  * @Description: TODO
  * @param     
  * @return void
  * @throws
  */
 private static  void setFnData(){
  int result=-1;
  int temp1=0;
  int temp2=1;
  for(int index=0;index<=maxSize;index++){
   if(index==0){
    result=temp1;
   }else if(index==1){
    result=temp2;
   }else{
    result=temp1+temp2;
    if(result<0){
     result=-2;
     break;
    }
    temp1=temp2;
    temp2=result;
   }
   fnData.add(result);
  }
 }
 /**
  * 
  * @Title: getFnData
  * @Description: TODO
  * @param @param n
  * @param @return    
  * @return int (n beyond fnData.size() and n<0 return -1)
  * @throws
  */
 public int getFnData(int n){
  if(fnData.size()==0){
   setFnData();
  }
  if(fnData.size()>n&&n>=0){
   return fnData.get(n);
  }else{
   return -1;
  }
 }
 /**
  * 
  * @Title: main
  * @Description: TODO
  * @param @param argv    
  * @return void
  * @throws
  */
 public static void main(String[] argv){
  Init init=new Init();
  int n=46;
  try {
   System.out.println("Type1="+init.fnType1(n));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   System.out.println(e.getMessage());
  }
  System.out.println("Type2="+init.fnType2(n));
  System.out.println("Type3="+init.getFnData(n));
 }
}

 

輸出結(jié)果:

復制代碼代碼如下:

Type1=1836311903  
Type2=1836311903  
Type3=1836311903  

 

對于算法設計,不要盲目遵循概念,概念是死的,人是活的(在這個需要crazy man的時代,有想法比循規(guī)蹈矩更有優(yōu)勢),只用結(jié)合具體的應用場景才能設計出優(yōu)秀的算法和結(jié)構(gòu)。
吐槽一下:個人認為優(yōu)秀的數(shù)據(jù)結(jié)構(gòu)設計可以簡化算法設計的復雜度提高代碼的可讀性、程序的擴展性及執(zhí)行效率;
再吐槽一下:做需求分析的時候應該遵循三點原則:1.從用戶角度及其思維方式分析;2.用戶說的不一定是他們真正想要的;3.用戶說的不一定是對的。做程序開發(fā)遵循原則:積極提升自身品味,站在用戶使用角度和使用場景分析功能;例如你做后臺接口開發(fā),你的用戶就是接口調(diào)用者,你應該考慮接口功能是什么,使用者在什么情況下會調(diào)用,傳入?yún)?shù)可能導致哪些異常,你的接口實現(xiàn)中可能出現(xiàn)哪些異常并對可能出現(xiàn)的異常進行捕獲,清楚明了的輸出,良好的函數(shù)自閉性;如果你是搞前臺,那你應該在保證業(yè)務實現(xiàn)的基礎上從用戶使用習慣等方面把自己當做使用者來設計UI。很有意思對不,需求、開發(fā)多了自然就明白了O(∩_∩)O~。

延伸 · 閱讀

精彩推薦
613
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久老妇| 亚洲乱码国产乱码精品精软件 | 久草在线免费福利资源 | 国产视频一区二区三区在线观看 | 91伊人| 国产精品久久久久久婷婷天堂 | 日本一区二区高清不卡 | 一区二区三区国产 | 伊人网电影 | 综合久久久 | 久久综合伊人 | 亚洲人成网亚洲欧洲无码 | 四虎影院在线 | 国产精品自拍视频 | 欧美日韩精品一区二区三区蜜桃 | 国产综合精品一区二区三区 | 日韩精品一区二区在线 | 亚洲黄色在线观看 | 综合久久久久 | 欧美日韩中文 | 日韩精品成人 | 91 在线观看 | 精品护士一区二区三区 | 久久久久无码国产精品一区 | 久久国产福利 | 岛国av一区| 一区二区三区视频 | 日韩在线视频播放 | 国产黄色a级毛片 | 美女久久久久 | 伊人色爱| 亚洲精选一区 | 国产片在线观看 | 欧美久久久久久 | 青青草在线视频免费观看 | 成人亚洲精品 | 日本中文在线 | 欧美久久久久久久 | 亚洲社区在线 | 毛片高清 | 男人影音|