博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥学院2019算法题2.1-2.5
阅读量:7050 次
发布时间:2019-06-28

本文共 3673 字,大约阅读时间需要 12 分钟。

递归基础练习题

代码实现及测试用例

1 package recursion;  2   3 import java.util.Arrays;  4   5 /**  6  * @author zsh  7  * @company wlgzs  8  * @create 2019-02-15 16:08  9  * @Describe 递归练习 10  */ 11 public class Main1 { 12     public static void main(String[] args) { 13         System.out.println("------------1、求n的阶乘----------------"); 14         System.out.println(f1(3)); 15         System.out.println("------------2、打印i到j-----------------"); 16         f2(1,3); 17         System.out.println("---------3、对arr所有元素求和-----------"); 18         System.out.println(f3(new int[]{1,2,3,4,5},0)); 19         System.out.println("------------4、翻转字符串---------------"); 20         String str = "hello"; 21         System.out.println(reverse(str,str.length()-1)); 22         System.out.println("-----------5、斐波拉契数列--------------"); 23         System.out.println(fib(5)); 24         System.out.println("-----------6、最大公约数----------------"); 25         System.out.println(gcd(10,6)); 26         System.out.println("--------7、递归实现插入排序-----+-------"); 27         int[] arr = new int[]{5,4,9,6,3}; 28         System.out.println(Arrays.toString(insertSort(arr,arr.length-2))); 29     } 30  31     /** 32      * f1(n)求n的阶乘 -->f(n-1)求n-1的阶乘 33      * 找重复:n*(n-1)!,求(n-1)!是原问题的重复(规模更小) --子问题 34      * 找变化:变化的量应该作为参数 35      * 找边界:出口 36      */ 37     static int f1(int n){ 38         if (n == 1) 39             return 1; 40         return n*f1(n-1); 41     } 42  43     /** 44      * f2(i,j)打印i到j 45      * 找重复:打印i,f2(i+1,j) --子问题 46      * 找变化:变化的量应该作为参数 47      * 找边界:出口 终止的条件 48      */ 49     static void f2(int i,int j){ 50         if (i>j){ 51             return; 52         } 53         System.out.println(i); 54         f2(i+1,j); 55     } 56  57     /** 58      * f3(arr,begin) 对arr所有元素求和 59      * 找重复:arr[begin] + f3(arr,begin+1) --子问题 60      * 找变化:变化的量应该作为参数 begin作为变化的量,相当于头指针。 61      * 找边界:出口 终止的条件 头指针与数组最后一个元素的索引相同 62      */ 63     static int f3(int[] arr,int begin){ 64         if (begin == arr.length-1){ 65             return arr[begin]; 66         } 67         return arr[begin] + f3(arr,begin+1); 68     } 69  70     /** 71      * reverse(str,end) 翻转字符串 72      * 找重复:str.charAt(end) + reverse(str,end-1) --子问题 73      * 找变化:变化的量应该作为参数 end作为变化的量,相当于尾指针。 74      * 找边界:出口 终止的条件 end == 0 75      */ 76     static String reverse(String str,int end){ 77         if (end == 0){ 78             return ""+str.charAt(0); 79         } 80         return str.charAt(end) + reverse(str,end-1); 81     } 82  83     /** 84      * fib(n) 斐波拉契数列 1 1 2 3 5 8 ..... 85      * 找重复:fib(n) = fib(n-1) + fib(n -2) --子问题 86      * 找变化:变化的量应该作为参数 n。 87      * 找边界:出口 终止的条件 n == 1 || n == 2 88      */ 89     static int fib(int n){ 90         if (n == 1 || n == 2){ 91             return 1; 92         }else { 93             return fib(n-1)+fib(n-2); 94         } 95     } 96  97     /** 98      * gcd(m,n) 最大公约数 辗转相除法 99      * 找重复:gcd(m,n) = gcd(n,m%n) --子问题100      * 找变化:变化的量应该作为参数 n。101      * 找边界:出口 终止的条件 n == 0102      */103     static int gcd(int m,int n){104         if (n == 0){105             return m;106         }107         return gcd(n,m%n);108     }109 110     /**111      * insertSort(arr,k) 递归实现插入排序112      * 找重复:insertSort(arr,k-1) 将k-1个排序后,把arr[k]插入到前面的数据中 --子问题113      * 找变化:变化的量应该作为参数 k。114      * 找边界:出口 终止的条件 k == 0115      */116     static int[] insertSort(int[] arr,int k){117         if (k == 0){118             return arr;119         }120         //对前k-1个元素排序121         insertSort(arr,k-1);122         //把k位置上的元素插入到前面的部分123         int x = arr[k];124         int index = k -1;125         while (index >= 0 && x 

 递归基础总结见博客:

转载于:https://www.cnblogs.com/zsh-blogs/p/10386049.html

你可能感兴趣的文章
享元模式
查看>>
M4修改外部晶振8M和25M晶振的方法
查看>>
六、python小功能记录——递归删除bin和obj内文件
查看>>
持续集成~Jenkins构建dotnetCore的项目
查看>>
EF架构~数据分批批量提交
查看>>
MVC+LINQToSQL的Repository模式系列~目录
查看>>
信号和槽:Qt中最差劲的创造
查看>>
design_model(1)singleton
查看>>
leetcode Majority Element
查看>>
treap模板
查看>>
vue组件通信之任意级组件之间的通信
查看>>
bootstrap2.02 notice
查看>>
Android Fragment的使用(1)
查看>>
OpenStack 物理资源问题
查看>>
torque dts格式大概分析
查看>>
0/1 分数规划
查看>>
第 6 章 Cinder - 045 - 理解 Cinder 架构
查看>>
对于IE6版本图片透明。
查看>>
bash shell for循环
查看>>
kettle-作业和参数
查看>>