一、题目
题目1:将非负十进制整数n转换成b进制。(其中b=2~16)
1.完成题目1,采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
2.程序设计风格良好,实现功能测试代码,确保程序的健壮性。
3.画出递归树或者递归栈的调用过程。
4.实现非递归方法。
二、算法设计
三、程序运行及测试截图
四、源程序
1.递归
import java.util.*;
public class 题目一 {
static int m=0;
public static int s(int n,int b)
{
if(n<b)
{System.out.print(n+"\t");
}
else
{m++;
if(m1)
System.out.println(“将”+n+“转化为”+b+“进制数”);
s(n/b,b);
if(n%b10)
System.out.print(“A”+"\t");
else if(n%b11)
System.out.print(“B”+"\t");
else if(n%b12)
System.out.print(“C”+"\t");
else if(n%b13)
System.out.print(“D”+"\t");
else if(n%b14)
System.out.print(“E”+"\t");
else if(n%b==15)
System.out.print(“F”+"\t");
else
System.out.print(n%b+"\t");
}
return 0;
}
public static void main(String [] args) {
int a=0;
int b=0;
Scanner in= new Scanner(System.in);
System.out.println(“请输入一个自然数”);
a=in.nextInt();
System.out.println(“请输入要转化为的进制数”);
b=in.nextInt();
s(a,b);
}
2.非递归
public static void main(String [] args) {
int n=0;
int m=0;
int b=0;
ArrayList s=new ArrayList();
Object [] arr=new Object [s.size()];
Scanner in= new Scanner(System.in);
System.out.println(“请输入一个自然数”);
n=in.nextInt();
System.out.println(“请输入要转化为的进制数”);
b=in.nextInt();
while(n>=b)
{
m++;
if(m==1)
System.out.println(“将”+n+“转化为”+b+“进制数”);
if(n%b==10)
s.add("A");
else if(n%b==11)
s.add("B");
else if(n%b==12)
s.add("C");
else if(n%b==13)
s.add("D");
else if(n%b==14)
s.add("E");
else if(n%b==15)
s.add("F");
else
s.add(n%b);
n=n/b;
}
if(n<b)
s.add(n);
System.out.println();
for(int i=s.size()-1;i>=0;i--)
{
System.out.print(s.get(i));;
}
}
五、总结
在此次针对将一个自然数转化为任意进制数的过程中,我采取了递归和非递归二种做法,让我更加深刻的理解了递归的用法和含义,在进行递归操作时,只要利用最后递归返回的过程将所得只进行输出就可以了。但是在利用非递归进行编写时,由于没有办法确定数字的长度,我采用了集合进行编写,最后将集合进行逆序输出。