java递归原理
1.什么是递归?
递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.
使用递归有两个前提条件:
1.有一个趋近与终止的条件。
2.自己调用自己 。
如何实现递归?
最重要的方式是:实现递归,需要去推导出一个递推公式。
思考递归的方式:横向思考,根据递推公式来思考。
代码的执行:是纵向执行。
递归的分类:
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
for循环实现99乘法表
public class test99 { public static void main( String[] args ) { for (int i=1;i<=9;i++){ for (int j=1;j<=i;j++){ System.out.print(j+" * "+i+ " = "+(i*j) +" "); } } } }
递归实现99乘法表
public class diguidemo { public static void main( String[] args ) { digui(9); } private static void digui( int i ) { if (i==1){ System.out.println("1*1=1"); }else { digui(i-1); for (int j=1;j<=1;j++){ System.out.print(j + "*" + i + "=" + j * i + " "); } } } }
递归求和
public class diguiqiuhe { public static void main( String[] args ) { int num=5; int sum=getSum(num); System.out.println(sum); } private static int getSum( int num ) { if (num==1){ return 1; } return num+getSum(num-1); } }
例题:递归方式求n的阶乘 画图分析:
实现代码 :
public class TestDemo { public static int fac(int n){ if(n == 1) { return 1; } int tmp = n * fac(n - 1); return tmp; } public static void main(String[] args) { System.out.println(fac(5)); } }
代码画图讲解:
例题:求n的和
画图分析:
第一种写法: public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } int tmp = n + sumAdd(n - 1); return tmp; } public static void main(String[] args) { System.out.println(sumAdd(3)); } } 第二种写法: public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } return n + sumAdd(n -1); } public static void main(String[] args) { System.out.println(sumAdd(3)); } }
例题:递归实现按照顺序打印每一位的数字
画图分析:
实现代码:
public class TestDemo { public static void print(int n){ if(n < 10){ System.out.print(n+" "); }else{ print(n/10); System.out.print(n%10+" "); } } public static void main(String[] args) { print(1234); } }
例题:写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9
实现代码:
public class TestDemo { public static int sumEveryone(int n){ if(n < 10){ return n; }else{ return n%10 + sumEveryone(n/10); } } public static void main(String[] args) { System.out.println(sumEveryone(7910)); } }
例题:求第n个斐波那契数是几
画图分析:
第一种方法:递归 public class TestDemo { public static int fib(int n){ if(n == 1 || n == 2){ return 1; }else{ return fib(n-2)+fib(n-1); } } public static void main(String[] args) { System.out.println(fib(5)); } 第二种方法:叫做循环(迭代)实现 public static int fib2(int n){ if(n == 1 || n==2){ return 1; } int f1 = 1; int f2 = 1; int f3 = 0; for (int i = 3; i < n; i++) { f3 = f1+f2; f1 = f2; f2 = f3; } return f3; } public static void main(String[] args) { System.out.println(fib2(45)); }
来源:
https://blog.csdn.net/weixin_28996271/article/details/114078034
https://www.yisu.com/zixun/690802.html