Java学习——递归

递归的概念

一个方法在执行过程中调用自身, 就称为 “递归”.
递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

例如, 我们求 N!
起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.
递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!

递归的必要条件:

  • 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
  • 递归出口

案例一:递归求N的阶乘

   public static int diGui(int N){
        if(N==1){
            return N;
        }
        return N*diGui(N-1);
    }
    public static void main(String[] args) {
        int ret=diGui(5);
        System.out.println(ret);
    }

递归过程分析

以求n的阶乘为例
image.png

  • 递归先递再归

递归练习

练习一: 递归求每位数字和

写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回 1+7+2+9,它的和是19

public static int func(int a){
        if(a<10){
            return a;
        }
        return a%10+func(a/10);
    }

    public static void main(String[] args) {
        System.out.println(func(1716));//19
    }

练习二: 求斐波那契数列的第 N 项

//方法一:递归
public static int feiBo(int a){
        if(a<=2){
            return 1;
        }
        return feiBo(a-1)+feiBo(a-2);
    }
    public static void main(String[] args) {
        System.out.println(feiBo(10));//55
    }
//方法二:循环
  public static int feiBo2(int n){
        int a=1;
        int b=1;
        int c=1;
        while(n>2){
            c=a+b;
            a=b;
            b=c;
            n--;
        }
        return c;
    }
public static void main(String[] args) {
        System.out.println(feiBo210));//55
    }

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值