zoukankan      html  css  js  c++  java
  • 递归原则

    转载自:http://blog.csdn.net/liu1064782986/article/details/7301551


    定义:一个函数用它自己来定义时就称为递归

    递归的四条基本法则:
    1.基准情形(base case):必须总要有某些基准的情形,它们不用递归就能进行求解
    2.不断推进(making progress):对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进
    3.设计法则(design rule):假设所有的递归调用都能运行
    4.合成效益法则(compound interest rule):在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作

    例如,用递归计算斐波那契数就违反了第四条法则:

    1. Fib(int n)  
    2. {  
    3.     if(n<=1)  
    4.         return 1;  
    5.     else  
    6.         return Fib(n-1) + Fib(n-2);  //在不同递归中做了重复性的工作  
    7. }  


    非递归版本:

    1. long Fib(int n)  
    2. {  
    3.     if (n<2)  
    4.     {  
    5.         return 1;  
    6.     }  
    7.     else  
    8.     {  
    9.         long first = 1;  //F[n-2]  
    10.         long second = 1; //F[n-1]  
    11.         int i;  
    12.         for (i=1; i+2<=n; i+=2)  
    13.         {  
    14.             first += second;  
    15.             second += first;  
    16.         }  
    17.         if (i<n)  
    18.         {  
    19.             return second+first;  
    20.         }  
    21.         else  
    22.         {  
    23.             return second;  
    24.         }  
    25.     }  


  • 相关阅读:
    指针数组、数组指针以及二维数组
    jquery的基本动画方法
    jquery面试需要看的基本东西
    bootstrap
    node全栈工程师
    setTimeout 0秒
    随便写的
    Bootstrap2和3的区别
    记忆的代码
    offsetWidth与scrollLeft
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020439.html
Copyright © 2011-2022 走看看