import java.util.Scanner;
public class JPA403 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
int m;
int n;
System.out.print("Input m : ");
m=keyboard.nextInt();
while(m!=999){
System.out.print("Input n : ");
n=keyboard.nextInt();
System.out.println("Ans ( 尾端遞迴 ) : "+fact(m,n,1));
System.out.println("Ans ( 迴圈 ) : "+loop(m,n,1));
System.out.print("Input m : ");
m=keyboard.nextInt();
}
}
static int fact(int x,int y,int z){
if(y>0){
return fact(x,y-1,x*z);
}
else{
return z;
}
}
static int loop(int x,int y,int z){
while (y>0){
z=z*x;
y--;
}
return z;
}
}
403 尾端遞迴次方計算
408 遞迴字串反向
import java.util.Scanner;
public class JPA408 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
String s, c;
System.out.print("Input a string: ");
s = keyboard.nextLine();
System.out.printf("%s\n", reverse(s));
System.out.print("Input a string: ");
s = keyboard.nextLine();
System.out.printf("%s\n", reverse(s));
}
static String reverse(String str){
if(str.equals("")){
return "";
}
else{
return reverse(str.substring(1))+str.substring(0,1);
}
}
}
405 遞迴函數
import java.util.Scanner;
public class JPA405 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
int n;
System.out.print("Input the number n :");
n= keyboard.nextInt();
System.out.println("Ans : "+sum2(n));
}
static int sum2(int n) {
if(n>1){
return sum2(n-1)+2*n;
}
else{
return 2;
}
}
}
407 尾端遞迴計算總和
import java.util.Scanner;
public class JPA407 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
String s;
System.out.print("Input a string of numbers: ");
s = keyboard.nextLine();
System.out.printf("尾端遞迴:%d\n", sumTail(s, 0));
System.out.printf("迴圈:%d\n", sumLoop(s, 0));
System.out.print("Input a string of numbers: ");
s = keyboard.nextLine();
System.out.printf("尾端遞迴:%d\n", sumTail(s, 0));
System.out.printf("迴圈:%d\n", sumLoop(s, 0));
}
static int sumTail(String s,int x){
if(s.equals("")){
return x;
}
else {
return sumTail(s.substring(1) , x+Integer.parseInt(s.substring(0,1)));
}
}
static int sumLoop(String s,int x){
while(!s.equals("")){
x+=Integer.parseInt(s.substring(0,1));
s=s.substring(1);
}
return x;
}
}
406 遞迴字串計算
import java.util.Scanner;
public class JPA406 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
String s;
System.out.print("Input a string: ");
s=keyboard.nextLine();
System.out.println(s+" has "+countA(s)+" As");
System.out.print("Input a string: ");
s=keyboard.nextLine();
System.out.println(s+" has "+countA(s)+" As");
}
public static int countA(String str) {
if(str.equals("")){
return 0;
}
else if(str.substring(0,1).equals("A")){
return 1+countA(str.substring(1));
}
else{
return countA(str.substring(1));
}
}
}
410 遞迴字串替換
import java.util.Scanner;
public class JPA410 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
String s, c1, c2;
System.out.print("Input a string: ");
s = keyboard.nextLine();
System.out.print("Input a character: ");
c1 = keyboard.nextLine();
System.out.print("Input another character: ");
c2 = keyboard.nextLine();
System.out.printf("%s\n", replace(s, c1, c2));
}
static String replace(String s,String c1,String c2){
if(s.equals("")){
return "";
}
else if (s.substring(0,1).equals(c1)){
return c2+replace(s.substring(1),c1,c2);
}
else{
return s.substring(0,1)+replace(s.substring(1),c1,c2);
}
}
}
409 遞迴字串移除
import java.util.Scanner;
public class JPA409 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
String s, c;
System.out.print("Input a string: ");
s = keyboard.nextLine();
System.out.print("Input a character: ");
c = keyboard.nextLine();
System.out.printf("%s\n", removeChar(s, c));
System.out.print("Input a string: ");
s = keyboard.nextLine();
System.out.print("Input a character: ");
c = keyboard.nextLine();
System.out.printf("%s\n", removeChar(s, c));
}
static String removeChar(String s, String c){
if(s.equals("")){
return "";
}
else if (s.substring(0,1).equals(c)){
return removeChar(s.substring(1),c);
}
else{
return s.substring(0,1)+removeChar(s.substring(1),c);
}
}
}
404 遞迴最大公因數
import java.util.Scanner;
public class JPA404 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
int m;
int n;
System.out.print("Input m : ");
m=keyboard.nextInt();
while(m!=999){
System.out.print("Intput n :");
n=keyboard.nextInt();
System.out.println("最大公因數 : "+fact(m,n));
System.out.print("Input m : ");
m=keyboard.nextInt();
}
}
static int fact (int m,int n){
if(n==0){
return m;
}
else{
return fact(n,m%n);
}
}
}
402 尾端遞迴階乘計算
import java.util.Scanner;
public class JPA402 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
int n;
System.out.print("Input n (0 <= n <= 16) :");
n=keyboard.nextInt();
while(n!=999){
System.out.println(n+"的階乘(尾端遞迴) = "+forloop(n,1));
System.out.println(n+"的階乘(迴圈) = "+fun(n,1));
System.out.print("Input n (0 <= n <= 16) :");
n=keyboard.nextInt();
}
}
static int fun(int x,int y){
if(x>0){
return fun(x-1,x*y);
}
else{
return y;
}
}
static int forloop(int x,int y){
while(x>0){
y=y*x;
x--;
}
return y;
}
}
401 遞迴階乘計算
import java.util.Scanner;
public class JPA401 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
int input=0;
System.out.println("Input n(0<=n<=16)");
input=keyboard.nextInt();
while(input!=999){
System.out.println(input+"的階層 = "+k(input));
System.out.println("Input n(0<=n<=16)");
input=keyboard.nextInt();
}
}
static int k(int x){
if(x>1){
return x*k(x-1);
}
else{
return 1;
}
}
}
訂閱:
文章 (Atom)