递归算法的明白

递归: 所谓递归,就是既有通报,又有回归,与其说是通报与回归,初学不如明白是一种  “循序递进”与“纪律约束”。 为什么这样说,由于递归算法相比较于循环在代码结构方面个人认为加倍简练清晰,...

递归:

所谓递归,就是既有通报,又有回归,与其说是通报与回归,初学不如明白是一种  “循序递进”与“纪律约束”。

为什么这样说,由于递归算法相比较于循环在代码结构方面个人认为加倍简练清晰,清晰易懂,递归注重的是一种有序的纪律,以是在每个程序最先之前,我们只要能找到一个使程序循序递进的纪律;并且在整个历程都在用此纪律举行通报,然则递归算法也有很大的瑕玷,会造成内存空间不足,从而形成内存溢出;以是针对这种瑕玷,就会引入“纪律约束”,在每一次算法的的最先之前,先对算法举行一个纪律约束,而这种约束可以明白为一个“归期”;即到这个归期不得已而为之……


eg:1 盘算1+2+3+4+……+100的值。

function fn(n){
if(n==1)return 1;       //归期
return n+fn(n-1);       //纪律
}
console.log(fn(100));


eg:2 盘算n 和 1/n!的阶乘。

//1. n!
function fn(n){
if(n==1)return 1;         //归期
return n*fn(n-1);          //纪律
}
console.log(fn(5));

//2. 1/n!
function fn(n){
if(n==1)return 1;         //归期
return 1/n*fn(n-1);         //纪律
}
console.log(fn(5));


 eg:3 斐波拉契数列(求第n个数的数值)  

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987……
function fn(n){
if(n==1||n=2)return 1;        //归期
return fn(n-1)+fn(n-2);         //纪律
}
console.log(fn(8));


eg:4 编写一个函数,输入n为偶数时,挪用函数求1/2+1/4+...+1/n,当输入n为奇数时,挪用函数求/1+1/3+...+1/n
function fn(n){
if(n%2==0){
if(n<=2)return 1/2;       //归期
return 1/n+fn(n-2);       //纪律
}
if(n%2!=0){
if(n==1)return 1;         //归期
return 1/n+fn(n-2);
}
}
console.log(fn(4));

eg:5 求1!+1/2!+1/3!+...+1/n!(递归与循环的连系)

function fn(n) {
    if (n == 1) return 1;       //归期
    return 1 / n * fn(n - 1);   //纪律
}
console.log(fn(5));


function fn1(n) {
   var sum = 0;
   for (i = 1; i <= n; i++) {
      sum += fn(i);
    }
    return sum;
}
console.log(fn1(5))



思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/5043

  • 发表于 2021-04-05 14:10
  • 阅读 ( 181 )
  • 分类:互联网

0 条评论

请先 登录 后评论
吴明w
吴明w

710 篇文章

你可能感兴趣的文章

相关问题