2020.02.27:递归基础练习(java实现)

递归设计经验(出自《算法很美》):
1.找重复(子问题);
2.找重复中的变化量(参数);
3.找参数变化趋势(出口);

练习1:求阶乘

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);      
        System.out.print("请输入一个数字:");
		int num=sc.nextInt();
		System.out.println(num+"的阶乘是"+fact(num));
		
    }
    public static int fact(int num){
    	if(num == 1)
    		return 1;
    		else
    			return num*fact(num-1);
    	}
}

输入格式:
请输入一个数字:4
输出格式:
4的阶乘是24

练习2:打印i到j

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
    	 Scanner sc=new Scanner(System.in);
    	 System.out.print("请输入两个数字:");
    	 int i = sc.nextInt();
    	 int j = sc.nextInt();
    	 f(i,j);
    	 sc.close();
    }
    public static void  f(int i,int j){
        if(i>j){
            return;
        }
        System.out.print(i);
        f(i+1,j);
       }    
    }

输入格式:
请输入两个数字:1 10
输出格式:
12345678910

如果不用Scanner类:

public class Main{
    public static void main(String[] args){
    f(1,10);//12345678910
    }
    public static void f(int i,int j){
        if(i>j)
            return;
        System.out.print(i);
        f(i+1,j);
    }
}

输出格式:
12345678910

练习3:数组求和

public class Main{
    public static void main(String[] args){
    	 int res = f3(new int[]{1,2,3,4,5},0);
    	 System.out.println(res);
    }    	 
    public static int  f3(int[] arr,int begin){
        if(begin==arr.length-1){
            return arr[begin];
        }
        return arr[begin]+f3(arr,begin+1);
        
       }    
    }

输出格式:15

练习4:翻转字符串

public class Main{
    public static void main(String[] args){
    	 System.out.print(reverse("abcd",3));
    }    	 
    public static String reverse(String src,int end){
        if(end==0){
            return ""+src.charAt(0);
        }
        return src.charAt(end)+reverse(src,end-1);
       }    
    }

输出格式:dcba

练习5:斐波那契数列

public class Main {
	public static void main(String[] args) {		
		System.out.println(fib(6));
	}
    public static int fib(int n) {
        if(n == 1||n == 2)
            return 1;
        else
        return fib(n-1) + fib(n-2);
    }
}

输出格式:8

练习6:最大公约数

辗转相除法

public class Main{
    public static void main(String[] args){
    int result =text6(319,377);
    System.out.println(result);
    }
   public static int text6(int m,int n) {
	   if(n==0)
		   return m;
	   return text6(n,m%n);
   		}
    }

输出格式:29

练习7:递归形式进行插入排序

import java.util.Arrays;
public class Main{
    public static void main(String[] args){
    	int arr[]= {5,3,6,1,2,4};
      	insertSort(arr,5);
      	System.out.print(Arrays.toString(arr));
    }
   public static void insertSort(int[]arr,int k){
	   if (k==0){
		   return;
	   }
	   insertSort(arr,k-1);
	   int x = arr[k];
	   int index = k-1;
	   while(index>-1&&x<arr[index]){
		   arr[index+1]=arr[index];
		   index--;
	   }
	   arr[index+1]=x;
   }
}

输出格式:[1, 2, 3, 4, 5, 6]

练习8:汉诺塔

public class Main{
    public static void main(String[] args){
    	printHanoiTower(3,"A","B","C");
    	}
    public static void printHanoiTower(int N, String from, String to, String help) {
    	if (N == 1) {
    		System.out.println("move " + N + " from " + from + " to " + to);
    		return ;
    		}
    		else {
    		printHanoiTower(N-1, from, help, to) ;
    		System.out.println("move " + N + " from " + from + " to " + to);
    		printHanoiTower(N-1, help,to,from) ;
    		}
    }
}		

输出格式:
move 1 from A to B
move 2 from A to C
move 1 from B to C
move 3 from A to B
move 1 from C to A
move 2 from C to B
move 1 from A to B

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值