如果你的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天:工资[32768]总计[65535]第17天:工资[65536]总计[131071]第18天:工资[131072]总计[262143]第19天:工资[262144]总计[524287]第20天:工资[524288]总计[1048575]第21天:工资[1048576]总计[ 2097151]第22天:工资[2097152]总计[4194303]第23天:工资[4194304]总计[8388607]第24天:工资[8388608]总计[16777215]第25天:工资[16777216]总计[3355第4431章第26天:工资[33554432]总计[67108863]第27天:工资[67108864]总计[134217727]第28天:工资[134217728]总计[268435455]第29天:工资[268435456]总计[536] 870911]天30:工资[536870912]总计[1073741823]
我的思路是:先算出当前的金额,然后把今天的日期和金额传递下去,直到计算满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天:工资[32768]总计[65535]
第17天:工资[65536]总计[131071]
第18天:工资[131072]总计[262143]
第19天:工资[262144]总计[524287]
第20天:工资[524288]总计[1048575]
第21天:工资[1048576]总计[ 2097151]
第22天:工资[2097152]总计[4194303]
第23天:工资[4194304]总计[8388607]
第24天:工资[8388608]总计[16777215]
第25天:工资[16777216]总计[3355第4431章
第26天:工资[33554432]总计[67108863]
第27天:工资[67108864]总计[134217727]
第28天:工资[134217728]总计[268435455]
第29天:工资[268435456]总计[536] 870911]
天30:工资[536870912]总计[1073741823]
我的思路是:先算出当前的金额,然后把今天的日期和金额传递下去,直到计算满30天为止。
然后调用
total()
即可: