已知递推数列:算法
a(1)=1数组
a(2i)=a(i)+1code
a(2i+1)=a(i)+a(i+1) (i为正整数)blog
求该数列的第n项,以及前n项中的最大值为多少,其n为多少?变量
采用递推的方法,使用一维数组,从2开始递推,一直递推到n遍历
a(i)=a(i/2)+1(n为偶数)方法
a(i)=a((i+1)/2)+((i-1)/2) (n为奇数)im
咱们只须要使用一个是否被2整除来判断n是偶数仍是奇数,从而选择相对应的递推公式next
查找最大值也容易,设置一个变量,只须要遍历该数组,遇到比变量大的就把该数值赋值给该变量img
最大值所对应的项可能不止一个,因此咱们找到一个就把该项数(数组的下标)打印出来
System.out.println("请输入n:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.close(); int[] a = new int[n+1];//从1开始,因此n+1 a[1]=1;//初始条件 //分条件进行正向递推 for(int i=2;i<=n;i++){ if(i%2==0){ a[i] = a[i/2]+1; }else{ a[i] = a[(i+1)/2]+a[(i-1)/2]; } } System.out.println("a("+n+")为"+a[n]); //遍历整个数组,找到最大值 int max = 0; for(int i=1;i<=n;i++){ if(max<a[i]){ max = a[i]; } } //遍历数组,找到与最大值相等的数,将该下标(项数)打印出来 for(int i=1;i<=n;i++){ if(max==a[i]){ System.out.print("a("+i+")="); } } System.out.print(max);