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