一·题目要求
题目1:将非负十进制整数n转换成b进制。(其中b=2~16)
题目2:将任何一个正整数用2的幂次方表示。
基本要求:
1.完成题目1,采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
2.程序设计风格良好,实现功能测试代码,确保程序的健壮性。
3.画出递归树或者递归栈的调用过程。
4.实现非递归方法。
提高要求:
1.完成题目2,同时设计出递归模型。
2.确保良好设计风格,完整的进行测试和调试。
二·题目分析
题目一(递归):
public static void toBinary(int num,int b){
if(num/b==0){//递归出口:当num除以进制数的商为0时,跳出递归
System.out.print(num%b);
}
else{
toBinary(num/b,b);//递归体:让整数num不断地除以进制数,知道满足递归出口条件
System.out.print(num%b);
}
}
非递归:
运用while循环(当num/b的值为0时跳出循环)
public static void fun(int num,int b) {
int p;
while(num/b!=0) {
p=num%b;
num=num/b;
System.out.print(p);
}
System.out.print(num);
}
三·递归调用过程
四·运行结果
题目一:
非递归:
递归:
五·程序
递归:
package TEST1;
import java.util.Scanner;
public class Test1 {
public static void main(String args[]){
System.out.print("请输入一个正整数:");
Scanner in=new Scanner(System.in);
int a=in.nextInt();
System.out.print("请输入一个进制数:");
int c=in.nextInt();
toBinary(a,c);//调用递归函数
}
public static void toBinary(int num,int b){
if(num/b==0){//递归出口:当num除以进制数的商为0时,跳出递归
System.out.print(num%b);
}
else{
toBinary(num/b,b);//递归体:让整数num不断地除以进制数,知道满足递归出口条件
System.out.print(num%b);
}
}
}
非递归:
package TEST2;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.print("请输入一个正数:");
Scanner in=new Scanner(System.in);
int a=in.nextInt();
System.out.print("请输入一个进制数:");
int c=in.nextInt();
fun(a,c);
}
public static void fun(int num,int b) {
int p;
while(num/b!=0) {
p=num%b;
num=num/b;
System.out.print(p);
}
System.out.print(num);
}
}
六·经验总结
在这次作业中,我在用键盘输入数据时遇到了困难,在网上进行搜索,后来解决了问题,在递归过程中会有先后顺序,输出数据是有顺序的,递归过程是一个嵌套一个的,而且要注意跳出递归的条件,不能有错误,否则会导致程序运行不出想要的结果。