递归和迭代的区别

递归

递归(recursion):递归常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(如A调用A)

小时候听过这样一个故事:

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事;

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事;

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事…

这个故事没完没了,这就是递归的一种表现形式,只是由于故事没有结束条件,也就是递归无法结束,除非老和尚挂了。

还有个浅显易懂的例子:

假如你在电影院看电影,刚开始你没看票随便找了一个位置坐下去,然后再看是不是电影票上的那一排座位,然后你就问前面一排的人是在第几排,结果前面的人也不知道,于是前面的人继续向前问,直到问道第一排的时候,由于第一排前面没座位了,因此就回传给第二排,第二排告诉第三排,依次到你这一排就能知道到底是在第几排了。

迭代

迭代(iteration):重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)

斐波拉契数列

斐波那契数列指的是这样一个数列:

image-20210913112547375

这个数列数列从第 3 项开始,每一项都等于前两项之和。其递推公式为:

F(0) = 0F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

递归求解

public int fib(int n) {
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    return fib(n - 1) + fib(n - 2);
}

迭代求解

public int fib(int n) {
    if (n == 0) return 0;
    if (n == 1 || n == 2) return 1;
    int a = 1;
    int b = 1;
    int temp = 0;//temp即为下一次循环的b的值
    for (int i = 3; i <= n; i++) {
        temp = a + b;
        a = b;
        b = temp;
    }
    return temp;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LBXX_1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值