• 递推和递归


    一、递推算法基本思想:

         递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推导而得到结果。递推算法的执行过程如下:

         1)根据已有的·结果和关系,求解中间结果

         2)判定是否达到要求,如果没有达到,则继续根据已知结果和关系求解中间结果;如果满足要求,则表示寻找到一个正确的答案。

    递推算法往往需要用户知道答案和问题之间的逻辑关系。在许多数学问题中,都有着明确的计算公式可以遵循,因此往往可以采用递推来实现。

    2.递推算法示例

         如果一对两个月大的兔子以后每个月可以生一对兔子,而一对新生的兔子出生两个月后才可以生兔子。也就是说1月份出生的3月份才能生子。假定一年内兔子没有死亡事件,那么一年后共有多少对兔子。

        分析产仔问题,逐月分析每月的兔子对数:

        第一个月:1对兔子

       第二个月:1对兔子

       第三个月:2对兔子

       第四个月:3对兔子

       第五个月:5对兔子

       第六个月:8对兔子

      。。。。。。。

    可以看出,从第三个月开始,每个月的兔子总队数是前两个月的对数之和,公式如下:

      第n个月兔子总数Fn = F(n-1)+F(n-2)

     代码示例:

        public static int Fibonacci(int n){ //月数
            int t1,t2;
            if(n == 1 || n ==2){
                return 1;
            }else{
                t1 = Fibonacci(n-1);
                t2 = Fibonacci(n-2);
                return t1+t2;
            }
            
        }

    二、递归算法思想:

     递归算法即在程序中不断反复调用自身来达到求解问题的方法。编写递归算法时,必须使用if语句强制方法在未执行递归调用前返回。如果不这样做,在调用方法后,它将永远不会返回。

    缺点:递归算法比非递归形式运行速度要慢一些。

    算法示例:

      计算阶乘,就是从1到指定数之间的所有自然数相乘的结果,n的阶乘为:

       n! = n*(n-1)*(n-2)*.......*2*1;

       代码:

    int fact(int n){
       if(n <= 1)
          return n;
       else
          return n*fact(n-1);  //递归
    
    }
  • 相关阅读:
    每天一个linux命令(1):ls命令
    如何查看和停止Linux启动的服务
    JavaScript作用域原理——作用域根据函数划分
    iOS 自动布局详细介绍
    arc下内存泄漏的解决小技巧
    AFNetwork2.0在报错1016,3840的解决方法及一些感悟
    iOS聊天下拉刷新聊天记录的实现
    tableview直接滚动至最后一行
    UITabBar,UINavigationBar的布局和隐藏问题
    transformjs玩转星球
  • 原文地址:https://www.cnblogs.com/jycboy/p/5304347.html
Copyright © 2020-2023  润新知