javascript - Problème d'algorithme récursif.
我想大声告诉你
我想大声告诉你 2017-07-07 10:35:05
0
5
1306

Si votre patron vous donne un yuan le premier jour, il vous donnera chaque jour le double du montant de la veille. C'est 1, 2, 4, 8.... . Maintenant, après 30 jours, combien d’argent avez-vous reçu au total ?
Exigence : utiliser la fonction récursive pour implémenter

我想大声告诉你
我想大声告诉你

répondre à tous(5)
给我你的怀抱

Le problème est très simple, la clé réside dans l'idée, voici le code.

/*
·递归
  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
}
伊谢尔伦
PHP版本

function recursion($day){
    if($day == 1){
        return 1;
    }else{
        return recursion($day - 1) + pow(2,$day - 1);
    }
}
echo recursion(30);
洪涛

Haha, dommage, j'ai lu la mauvaise question

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

#递归的实现方式
def fn1(n):
    return 1 if n <= 1 else fn1(n-1) * 2
習慣沉默
#!/usr/bin/env python

def salary(n):
    '''Your salary everyday'''
    if n <= 1:
        return 1
    return 2*salary(n-1)


def money(n):
    '''Total money you get for n days.'''
    if n <= 0:
        return 0
    s = salary(n)  # or s = 2**(n-1)
    m = money(n-1)
    print("day %d: salary[%d] total[%d]" % (n, s, (s+m)))
    return s+m 

money(30)

jour 1 : salaire[1] total[1]
jour 2 : salaire[2] total[3]
jour 3 : salaire[4] total[7]
jour 4 : salaire[8] total[15]
jour 5 : salaire[16] total[31]
jour 6 : salaire[32] total[63]
jour 7 : salaire[64] total[127]
jour 8 : salaire[128] total[255]
jour 9 : salaire[256] total[511]
jour 10 : salaire[512] total[1023]
jour 11 : salaire[1024] total[2047]
jour 12 : salaire[2048] total[4095]
jour 13 : salaire[ 4096] total[8191]
jour 14 : salaire[8192] total[16383]
jour 15 : salaire[16384] total[32767]
jour 16 : salaire[32768] total[65535]
jour 17 : salaire[65536] total[131071]
jour 18 : salaire[131072] total[262143]
jour 19 : salaire[262144] total[524287]
jour 20 : salaire[524288] total[1048575]
jour 21 : salaire[1048576] total[ 2097151]
jour 22 : salaire[2097152] total[4194303]
jour 23 : salaire[4194304] total[8388607]
jour 24 : salaire[8388608] total[16777215]
jour 25 : salaire[16777216] 4431]
jour 26 : salaire[33554432] total[67108863]
jour 27 : salaire[67108864] total[134217727]
jour 28 : salaire[134217728] total[268435455]
jour 29 : salaire[268435456] 870911]
jour 30 : salaire[536870912] total[1073741823]

迷茫

Mon idée est la suivante : calculez d'abord le montant actuel, puis transmettez la date et le montant du jour jusqu'à ce que le calcul atteigne 30 jours.

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;
}

Alors appelez total() :

total(1); // 1
total(2); // 3
total(7); // 127
total(30); // 1073741823
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!