如果你的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()
即可: