递归;进制转化;2的幂次方;

第6章 递归

题目1:将非负十进制整数n转换成b进制。(其中b=2~16

一.题目分析:

  1. 定义一个字符串函数fun。
  2. 递归头:当n小于等于0时,返回一个空字符串“”;
  3. 设yu为n/b的余数;
  4. 若yu数小于10,则返回 yu
  5. 若yu大于等于10,则返回(char)(‘A’+(yu-10));
  6. 递归体为fun(N/2,x),当n小于等于0时,返回“”,当上一个n,返回“yu”;

二.源程序:

public class Main {
	
public static void main(String[] args) {
	Scanner sca=new Scanner(System.in);
	System.out.println("请输入要转化的数字:");
	int z=sca.nextInt();
	System.out.println("请输入要转化的进制:");
	int x=sca.nextInt();
	System.out.println("转化的结果:");
	System.out.println(fun(z, x));
	sca.close();
}


public static String fun(int num ,int x) {
	if(num==0) {
		return "" ;
	}
	int yu = num % x;
	if(yu>=10) {
			return fun(num / x, x) + (char)('A'+(yu - 10));
			
		
	} else {
		return fun(num / x, x) + yu;
	}

}
}

三.测试与调试:

题目2:任何一个正整数都可以用2的幂次方表示。例如:

137=2^7+2^3+2^0

  同时约定幂次方用括号来表示,即ab 可表示为a(b)。

   由此可知,137可表示为:

   2(7)+2(3)+2(0)

  进一步:7= 2^2+2+2^0   (21用2表示)

   3=2+2^0  

  所以最后137可表示为:

   2(2(2)+2+2(0))+2(2+2(0))+2(0)

   又如:

   1315=2^10 +2^8 +2^5 +2+2^0

  所以1315最后可表示为:

   2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

  输入:正整数(n≤20000)

输出:符合约定的n的0,2表示(在表示中不能有空格)

输入格式 Input Format

        一个正整数

输出格式 Output Format      

        符合约定的n的0,2表示(在表示中不能有空格)

样例输入 Sample Input

73

样例输出 Sample Output      

 2(2(2)+2)+2(2+2(0))+2(0)

一.源程序:

package cn.test.wuyugege;

public class Main {
public static void main(String[] args) {
	fun(73,0);
}



public static void fun(int m,int n)
//m为被分解的数,n为二进制位数,r为位数上的数值。 
{
  int r; 
  if(m==0)//m已经被分解完,返回 
  {
      return;
  }
  r=m%2;
  m=m/2;

  fun(m,n+1);
  if(m!=0&&r!=0)
  //如果m不为0且r不为0证明这不是第一个2的幂次方,输出+
  {
     System.out.print("+");
  }
  if(r==1)
  {
      if(n==0)
      {
          System.out.print("2(0)");
      }
      else if(n==1)
      {
          System.out.print("2");
      }
      else if(n==2)
      {
       System.out.print("2(2)");
      }
      else
      {
          System.out.print("2(");
          fun(n,0);
          //如果指数不能用2(0),2,2(2)表示则继续分解
         System.out.print(")");
      }

  }
}
}

二.调试:

三.心得体会:

  1. 经过本次作业,我对于递归算法的思想更加了解,。
  2. 不知道递归头和递归体该如何进行设计。
  3. 经过此次作业的锻炼,,我对于递归头,递归体有了更好的掌握。
  4. 当然,第二题刚开始还是有点难,但是借助https://blog.csdn.net/lydia_ke/article/details/78678792,找更好的解决办法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值