php - 递推 递归 迭代 三者间有什么区别?
怪我咯
怪我咯 2017-04-11 10:33:40
[PHP讨论组]

递推 递归 迭代 三者间有什么区别?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
大家讲道理

简单来说,递推和迭代是类似的,是自己控制重小算到大。

fib = [0] * 100
fib[0] = 1
fib[1] = 1
for idx,_ in enumerate(fib):
    if idx > 1:
        fib[idx] = fib[idx -1] +fib[idx -2]

而递归是由程序控制,并且一般都有递归次数的限制,防止无限循环。

def fib(n):
    if n < 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)
PHPz

递归是自顶向下逐步拓展需求,最后自下向顶运算。即由f(n)拓展到f(1),再由f(1)逐步算回f(n)
迭代是直接自下向顶运算,由f(1)算到f(n)。
递归是在函数内调用本身,迭代是循环求值。

分别用递归法和迭代法求斐波那契数列:

//使用递归的方法实现  
   
long long fibonacci_recursive(int n) {  
    if (n <= 0)  
        return 0;  
    if (n == 1)  
        return 1;  
    return fibonacci_recursive(n - 2) + fibonacci_recursive(n - 1);  
}  
   
   
   
//使用迭代的方法实现  
   
long long fibonacci_iteration(int n) {  
    int result[2] = { 0, 1 };  
    int i = 2;  
    long long num = 0;  
    if(n < 2) {  
        return result[n];  
    }  
    long long fib_minusone = 1;  
    long long fib_minustwo = 0;  
    for(;i <=n;i++) {  
        num = fib_minusone + fib_minustwo;  
        fib_minustwo = fib_minusone;  
        fib_minusone = num;  
    }  
    return num;  
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号