搜尋

首頁  >  問答  >  主體

javascript - 遞歸演算法問題.

如果你的boss第一天給你一元錢,後面每一天給你的是前一天的一倍。也就是說1,2,4,8.... 。現問到了30天后,你一共拿了多少錢?
需求: 用遞迴函數來實作

我想大声告诉你我想大声告诉你2689 天前1316

全部回覆(5)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-07-07 10:37:05

    問題很簡單,關鍵在於思路,以下是程式碼。

    /*
    ·递归
      1. salarySum(n) = salarySum(n-1) + salary(n)
      2. salary(n) = 2 ^ (n-1)
    
    ·非递归
      循环
    */
    
    function salary(nthDay){
      return Math.pow(2, nthDay-1)
    }
    
    // 递归
    function salarySum(nthDay) {
      if (nthDay > 1) {
        return salarySum(nthDay - 1) + salary(nthDay)
      } else {
        return 1
      }
    }
    
    // 非递归
    function salarySum(nthDay) {
      let day = 1
      let sum = 0
      while (day <= nthDay) {
        sum += salary(day)
        day++
      }
      return sum
    }

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-07 10:37:05

    雷雷

    回覆
    0
  • PHP中文网

    PHP中文网2017-07-07 10:37:05

    哈哈,汗顏,看錯題目

    #不递归的实现方式
    def fn(n):
        return 2 ** (n - 1)
    
    #递归的实现方式
    def fn1(n):
        return 1 if n <= 1 else fn1(n-1) * 2
    

    回覆
    0
  • 習慣沉默

    習慣沉默2017-07-07 10:37:05

    雷雷

    第1天:工資[1]總計[1]
    第2天:工資[2]總計[3]
    第3天:工資[4]總計[7]
    第4天:工資[8]總計[ 15]
    天5: 工資[16]總計[31]
    第6天:工資[32]總計[63]
    第7天:工資[64]總計[127]
    第8天:工資[128]總計[255]
    第9天:薪資[256]總計[511]
    第10天:薪資[512]總計[1023]
    第11天:薪資[1024]總計[2047]
    第12天:薪資[2048 ]總計[4095]
    第13天:薪資[ 4096]總計[8191]
    第14天:薪資[8192]總計[16383]
    第15天:薪資[16384]總計[32767]
    第16天:薪資[16384]總計[32767]
    第16天:薪資[32768]總計[65535]
    第17天:工資[65536]總計[131071]
    第18天:工資[131072]總計[262143]
    第19天:工資[262144]總計[5242887] :薪資[524288]總計[1048575]
    第21天:薪資[1048576]總計[ 2097151]
    第22天:薪資[2097152]總計[4194303]
    第23天:薪資[4194303]
    第23天:薪資[4194303]
    第23天:薪資24天:薪資[8388608]總計[16777215]
    第25天:薪資[16777216]總計[3355第4431章
    第26天:薪資[33554432]總計[67108863] 134217727]
    第28天:薪資[268435456]總計[536 870911]
    第29天:薪資[268435456]總計[536 870911]
    天30:薪資[5368707236

    回覆
    0
  • 迷茫

    迷茫2017-07-07 10:37:05

    我的思路是:先算出當前的金額,然後把今天的日期和金額傳遞下去,直到計算滿30天為止。

    function total(all, day,money){
        var day = day || 1,
            money = money || 0.5;
    
        money *= 2;
        // console.log( 'day'+day+': '+ money ); // 输出当前的金额
        day++;
        if(day<=all){
            return money + total(all, day, money);
        }
        return money;
    }
    

    然後呼叫total()即可:

    total(1); // 1
    total(2); // 3
    total(7); // 127
    total(30); // 1073741823

    回覆
    0
  • 取消回覆