递归问题(斐波那契数列)

递归


前言

递归是Java中常用的方法,有许多问题用常用的方法难以实现,但是使用递归方法就会轻而易举的解决。

一、前言

遇到一些问题并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解。
在这里插入图片描述

二、递归

一个方法在执行过调用了自身,就称为递归。

递归的特征:自己中包含自己。

递归相当于数学上的”数学归纳法”,有一个其实条件,然后有一个递推公式
例: 求N!
N!=N*(N-1)*(N-2) * …… * 1
当N=1时这个起始条件相当于结束条件
求N!,直接不是很好做,我们可以将N!=>N *(N-1)!
同理求(N-1)!=>(N-1) * (N-2)!
……
如此递归下去直到求1!为止。这个问题就解决了

代码如下(求N!):

    public static int  funcyion(int N){
        if(N==1){
            return 1;
        }
        return N*funcyion(N-1);
    }

注意:
1.每次递归的时候这个方法只执行一部分之后就去执行另一部分。
2.归的时候,会把当前方法剩余部分给执行完。
3.递的次数与归的次数相同。
若N=5时,代码执行如下图在这里插入图片描述

完整代码(求5!):

import java.util.Scanner.*;
public class Main {
    public static int  funcyion(int N){
        if(N==1){
            return 1;
        }
        return N*funcyion(N-1);
    }
    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            System.out.println(funcyion(N));
    }
}
输入5
输出120

二、斐波那契数列(递归经典问题)

斐波那契数列是一个经典的递归问题
斐波那契数列(Fibonacci sequence),又称黄金分割数列,又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584……在数学上,斐波那契数列以如下被以递推的方法定义:
F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

1.递归实现

在这里插入图片描述
如此往下递推直到推到终止条件。

2.代码实现

import java.util.Scanner;
public class Main {
    public static int fun(int n)
    {
        if(n==1){
            return 0;
        } else if (n==2) {
            return 1;
        } else{

            return fun(n-1)+fun(n-2);
        }

    }
    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            System.out.println(fun(N));
    }
}

总结

递归方法在编程过程中会让问题变的简单易懂,让原本困难的题迎刃而解,为了更加深刻的理解还应该多练习才行,希望对大家有所帮助。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚不熬夜@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值