84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
如果你的boss第一天給你一元錢,後面每一天給你的是前一天的一倍。也就是說1,2,4,8.... 。現問到了30天后,你一共拿了多少錢? 需求: 用遞迴函數來實作
問題很簡單,關鍵在於思路,以下是程式碼。
/* ·递归 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 }
雷雷
哈哈,汗顏,看錯題目
#不递归的实现方式 def fn(n): return 2 ** (n - 1) #递归的实现方式 def fn1(n): return 1 if n <= 1 else fn1(n-1) * 2
第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
我的思路是:先算出當前的金額,然後把今天的日期和金額傳遞下去,直到計算滿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()
total(1); // 1 total(2); // 3 total(7); // 127 total(30); // 1073741823
問題很簡單,關鍵在於思路,以下是程式碼。
雷雷
哈哈,汗顏,看錯題目
雷雷
第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
我的思路是:先算出當前的金額,然後把今天的日期和金額傳遞下去,直到計算滿30天為止。
然後呼叫
total()
即可: