经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
算法学习——递推算法之摆动数列 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2018/10/21 20:08:02  对本文有异议

算法描述

已知递推数列:

a(1)=1

a(2i)=a(i)+1

a(2i+1)=a(i)+a(i+1) (i为正整数)

求该数列的第n项,以及前n项中的最大值为多少,其n为多少?

算法思路

  1. 采用递推的方法,使用一维数组,从2开始递推,一直递推到n

    a(i)=a(i/2)+1(n为偶数)

    a(i)=a((i+1)/2)+((i-1)/2) (n为奇数)

    我们只需要使用一个是否被2整除来判断n是偶数还是奇数,从而选择相对应的递推公式

  2. 查找最大值也容易,设置一个变量,只需要遍历该数组,遇到比变量大的就把该数值赋值给该变量

  3. 最大值所对应的项可能不止一个,所以我们找到一个就把该项数(数组的下标)打印出来

算法实现

  1. System.out.println("请输入n:");
  2. Scanner scanner = new Scanner(System.in);
  3. int n = scanner.nextInt();
  4. scanner.close();
  5. int[] a = new int[n+1];//从1开始,所以n+1
  6. a[1]=1;//初始条件
  7. //分条件进行正向递推
  8. for(int i=2;i<=n;i++){
  9. if(i%2==0){
  10. a[i] = a[i/2]+1;
  11. }else{
  12. a[i] = a[(i+1)/2]+a[(i-1)/2];
  13. }
  14. }
  15. System.out.println("a("+n+")为"+a[n]);
  16. //遍历整个数组,找到最大值
  17. int max = 0;
  18. for(int i=1;i<=n;i++){
  19. if(max<a[i]){
  20. max = a[i];
  21. }
  22. }
  23. //遍历数组,找到与最大值相等的数,将该下标(项数)打印出来
  24. for(int i=1;i<=n;i++){
  25. if(max==a[i]){
  26. System.out.print("a("+i+")=");
  27. }
  28. }
  29. System.out.print(max);

结果

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号