简单的算法题1

递归函数(猴子吃桃  卖金鱼  斐波那契数列  搭公交):

       1.简单示例:

          function sum(n) {
           if (n == 1) {
              return 1;
           } else {
              return n + sum(n - 1);
           }
        }
       console.log(sum(100));

 

         2.猴子吃桃案例:

           小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.
         第二天早上又将剩下的桃子吃一半,又多吃一个
.
         以后每天早上吃前一天剩下的一半加一个
.
         到第10天早上猴子想再吃时发现,只剩下一个桃子了
.
         问第一天猴子共摘多少个桃子?

             function f(n){
             if(n == 10){
                return 1;
             }else{

                //f(n)/2-1=f(n+1);
                return 2*(f(n+1)+1);
             }

          }
          console.log(f(1));

 

         3.卖金鱼

            出售金鱼问题:第一次卖出全部金鱼的一半加二分之一条金鱼;
          第二次卖出乘余金鱼的三分之一加三分之一条金鱼;
          第三次卖出剩余金鱼的四分之一加四分之一条金鱼;
          第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,
          求原来有多少条?

             function jY(n){
            if(n == 5){
                return 11;
            }else{
         
        //jY(n)*n/(n+1) - 1/(n+1) = jY(n+1);
               return (jY(n+1)*(n+1)+1)/n;
           }
         }
         console.log(jY(1));

 

        4.用递归求斐波那契数列:

            //1 1 2 3 5 .....

         //斐波那契数列是指从第三项开始,没一项的值为前两项的和,而第一二项则为1;
         function fn(n){

            //1.2项的值为1;
            if(n == 1 || n == 2){
                return 1;
            }else{
                return (fn(n-1) + fn(n-2));
            }
          }
          console.log(fn(100));

 

        5.用递推法求斐波那契数列:

             function f(n){
             var f1 = 1;
             var f2 = 1;
             for(var i=1;ii++){
                   var temp = f2;
                   f2 = f2 + f1;
                   f1 = temp;
              }
               return temp;
            }
            console.log(f(5));

 

      6.搭公交:

                 某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,

                 到了第二站先下一半乘客,再上来了六位乘客;

                 到了第三站也先下一半乘客,再上来了五位乘客,

                 以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个,

                 到了终点站车上还有乘客六人,问发车时车上的乘客有多少?

                 function f(n){
                  if(n == 8){              //第8站车上有的人(第8站未下车的人)。
                       return 6;
                  }else{

                      //f(n+1) = f(n)/2 + (8-n);
                      return (f(n+1)+n-8)*2;
                  }
             }

            console.log(f(2));       //第2站未下车的人,即第一站的人。

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)运动会开了N天,一共发出金牌M枚。第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。到了第N天刚好还有金牌N枚,到此金牌全部发完。编程求N和M。 (2)国王分财产。某国王临终前给儿子们分财产。他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i个儿子i份,再加上剩余财产的1/10。每个儿子都窃窃自喜。以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。请用程序回答,老国王共有几个儿子?财产共分成了多少份? (3)出售金鱼问:第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。问这鱼缸里原有多少条金鱼? (4)某路公共汽车总共八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值