算法--360面试:使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2...以此类推,求a30
生活随笔
收集整理的這篇文章主要介紹了
算法--360面试:使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2...以此类推,求a30
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Q題目
編程求解
使用遞歸實(shí)現(xiàn):a0=1,a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此類推,求a30Answer解法
方式一:采用逆向思維
非常明顯這是一道簡單動(dòng)態(tài)規(guī)劃的題目,
從后往前逆向推理,遞推公式如下:
An=A(n?1)+A(n?2)
終止條件:當(dāng)n=2時(shí),A(n-1 )和 A(n-2)分別為 A0 和 A1
方式二:采用正向思維
從a0和a1,逐個(gè)往后計(jì)算,知道找到自己需要的值。
代碼如下:
public class Test {public static void main(String args[ ]){int a0=1;int a1=1;System.out.println("方法一測試結(jié)果:"+getNum(a0, a1, 29));System.out.println();System.out.println("方法二測試結(jié)果:"+getNum(30));}/**正向思維:優(yōu)點(diǎn),起始值可以人為控制;不局限于本題的a0=a1=1; 缺點(diǎn):計(jì)算過程復(fù)雜一些* 使用遞歸實(shí)現(xiàn):a0=1,a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此類推,求an* @param a 起始數(shù)1:a0* @param b 起始數(shù)2:a1* @param times 遞歸次數(shù):an,則times=n-1* @return*/public static int getNum(int a,int b,int times){int temp=a+b;times--;if(times==0){return temp;}return getNum(b, temp,times);}/**逆向思維:優(yōu)點(diǎn),清晰明了* 使用遞歸實(shí)現(xiàn):a0=1,a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此類推,求an* @param num 是an的下標(biāo),即num=n* @return*/public static int getNum(int num){if (num==0||num==1) {num=1;}else {num=getNum(num-1)+getNum(num-2);}return num;}}測試結(jié)果
總結(jié)
以上是生活随笔為你收集整理的算法--360面试:使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2...以此类推,求a30的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle三种循环:for,while
- 下一篇: MySql之DDL操作创建表(添加主键,