zoukankan      html  css  js  c++  java
  • 消除递归的方法

    1、若递归是尾递归,那利用循环就可以消除,尾递归是是在函数末尾递归调用本函数的方式,满足以下格式:

    int  function(int n){
    
    if(n==0)
    
    return 1;
    
    else 
    return function(n-1);
    
    }
    

      尾递归采用循环,利用n=1的结果,定义一个变量记res记住,然后循环慢慢算n=2、3....的结果,每次计算出n的值后都让res记住,每次计算function的值利用res计算,下面给出计算一个例子

    #include <stdio.h>
    
    //递归的方法 int fib(int n) { if(n==1) return 1; if(n==0) return 0; else return fib(n-1)+fib(n-2); }
    非递归的方法 int fib2(int n) { if(n==1) return 1; else if(n==0) return 0; int fib0=0; int fib1=1; int result=0; for(int x=2;x<=10;x++) { result=fib0+fib1; fib0=fib1; fib1=result; } return result; } void main() { int a=fib(10); int b=fib2(10); printf("a的值是:%d ",a); printf("b的值是:%d ",b); }

      2、若不是非递归就需要基于栈来消除递归,详细过程可见:耿国华 ,数据结构129页。

  • 相关阅读:
    软件开发规范
    内置模块
    自定义模块
    装饰器 递归
    内置函数 闭包
    生成器 推导式
    函数名运用 新版格式化输出 迭代器
    函数进阶
    pycharm快捷键
    移动端必测点
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4748833.html
Copyright © 2011-2022 走看看