算法--360面试:使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2...以此类推,求a30

系统管理员 2022-06-12 11:56 318阅读 0赞

Q题目

编程求解

  1. 使用递归实现:a0=1a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此类推,求a30

Answer解法

方式一:采用逆向思维

非常明显这是一道简单动态规划的题目,

从后往前逆向推理,递推公式如下:

An=A(n−1)+A(n−2)

终止条件:当n=2时,A(n-1 )和 A(n-2)分别为 A0 和 A1

方式二:采用正向思维

从a0和a1,逐个往后计算,知道找到自己需要的值。

代码如下:

  1. public class Test {
  2. public static void main(String args[ ]){
  3. int a0=1;
  4. int a1=1;
  5. System.out.println("方法一测试结果:"+getNum(a0, a1, 29));
  6. System.out.println();
  7. System.out.println("方法二测试结果:"+getNum(30));
  8. }
  9. /**正向思维:优点,起始值可以人为控制;不局限于本题的a0=a1=1; 缺点:计算过程复杂一些
  10. * 使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此类推,求an
  11. * @param a 起始数1:a0
  12. * @param b 起始数2:a1
  13. * @param times 递归次数:an,则times=n-1
  14. * @return
  15. */
  16. public static int getNum(int a,int b,int times){
  17. int temp=a+b;
  18. times--;
  19. if(times==0){
  20. return temp;
  21. }
  22. return getNum(b, temp,times);
  23. }
  24. /**逆向思维:优点,清晰明了
  25. * 使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2;a4=a2+a3...以此类推,求an
  26. * @param num 是an的下标,即num=n
  27. * @return
  28. */
  29. public static int getNum(int num){
  30. if (num==0||num==1) {
  31. num=1;
  32. }else {
  33. num=getNum(num-1)+getNum(num-2);
  34. }
  35. return num;
  36. }
  37. }

测试结果

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,318人围观)

还没有评论,来说两句吧...

相关阅读