zoukankan      html  css  js  c++  java
  • 递归与尾递归

    function fibonacci2(n, result, preValue) {
                if (n == 0) {
                    return result;
                }
                return fibonacci2(n - 1, preValue, result + preValue);
            }
            console.log("使用了尾递归,不会栈溢出", fibonacci2(2, 0, 1));
     
    function fibonacci2(n, result, preValue) {
                if(n === 0){
                    return result
                }
                return fibonacci2(n-1,preValue,result+preValue)
            }
            console.log(fibonacci2(100,0,1))
            fibonacci2(99,1,1)
            
            fibonacci2(98,1,2)
            fibonacci2(98,2,3)
     
     
     
    function fac(n){
                if(n === 1){
                    return 1
                }
                return fac(n-1)*n
            }
            console.log(fac(10))
            function fac(n,sum){
                if(n === 1){
                    return sum
                }
                return fac(n-1,n*sum)
            }
            console.log(fac(10,1))
            fac(9,10)
            fac(8,10*9)
    总结:尾递归,可想而知是逆递归,正常我们10个循环 是从1到10,而尾递归 是从10到1循环,但是循环的规律不变,这样也可以实现,而且还能避免栈溢出
  • 相关阅读:
    数学
    ACM之路
    归并排序(分治法,nlogn,较为稳定)
    字典树基础模板
    c语言对象(函数,类,变量)的声明与定义
    typedef的高级用法---------理解函数声明
    4503: 两个串
    HDU 5972 Regular Number
    HDU 5215 Cycle
    Hihocoder #1513 : 小Hi的烦恼
  • 原文地址:https://www.cnblogs.com/MDGE/p/14614620.html
Copyright © 2011-2022 走看看