मैं एक रिकर्सन समस्या से निपट रहा हूं जो "हाय" की एक स्ट्रिंग देता है जहां पहले "हाय" में पूंजी एच होती है और स्ट्रिंग विस्मयादिबोधक बिंदु के साथ समाप्त होती है। मेरे पास अब तक नीचे दिया गया कोड है, लेकिन मुझे यकीन नहीं है कि "हाय" के बाद की घटनाओं को पूंजी एच होने से कैसे रोका जाए। किसी भी मार्गदर्शन का स्वागत किया जाएगा।

function greeting(n) {
  if (n === 0) {
    return "";
  } else if (n === 1) {
    return "Hi!"
  } else {
    return `${'Hi' + greeting(n - 1)}`
  }
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi!
1
ruggle 23 जिंदा 2021, 08:40

4 जवाब

सबसे बढ़िया उत्तर

अपनी समस्या को हल करने का एक तरीका यह है कि फ़ंक्शन को फ़्लैग पास किया जाए जो इंगित करता है कि क्या यह पहली कॉल है, और केवल उस स्थिति में hi को कैपिटलाइज़ करें। ध्यान दें कि आप ! जब n == 0; तो आपको विशेष मामले की आवश्यकता नहीं है n == 1:

function greeting (n, first = true) {
  if (n === 0) {
    return "!";
  } 
  else {
    return `${(first ? 'Hi' : 'hi') + greeting(n - 1, false)}`
  } 
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi!
1
Nick 23 जिंदा 2021, 08:45

आप रिकर्सिव फ़ंक्शन में किसी प्रकार के ध्वज का उपयोग करके इसे हल कर सकते हैं ताकि आपको पता चल सके कि आप पहली बार या आखिरी बार कब हैं, लेकिन फ़ंक्शन को कॉल करते समय स्ट्रिंग में पहली बार "हाय" जोड़कर इसे संभालने का एक वैकल्पिक तरीका है और फिर फ़ंक्शन को n - 1 बार कॉल करें।
अधिक स्पष्टीकरण के लिए नीचे उदाहरण देखें

function getOutput(n) {
  if(n > 0) {
    return "Hi" + greeting(n - 1) + "!";
  }  
  return "";
}

function greeting(n) {
  if (n > 0) {
    return "hi" + greeting(n - 1);
  }
  return "";
}

let n = 3;
console.log(getOutput(n)) // should return Hihihi!
n = 5;
console.log(getOutput(n)) // should return Hihihihihi!
-1
mss 23 जिंदा 2021, 09:12

तुम यह कर सकते हो:

const greeting = n => !n ? '!' : 'H'+('i'+greeting(--n)).toLowerCase()
 
console.log( greeting(3) )  
console.log( greeting(5) )  
.as-console-wrapper { max-height: 100% !important; top: 0; }

यदि आप निंजा कोड से अपरिचित हैं:

function greeting(n)
  {
  if (n===0) return '!'
  else       return 'H'+ ('i'+ greeting(--n)).toLowerCase()
  }
0
Mister Jojo 23 जिंदा 2021, 09:30

आपके कोड में बस एक .toLowerCase() गायब है।

`${'Hi' + greeting(n - 1).toLowerCase()}`

आपको n === 1 चरण की आवश्यकता नहीं है।

function greeting(n) {
  if (n === 0) {
    return "!";
  } else {
    return `${'Hi' + greeting(n - 1).toLowerCase()}`
    //------------------------------^^^^^^^^^^^^^^
  }
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi!
0
Praveen Kumar Purushothaman 23 जिंदा 2021, 16:58