Reputation: 105
I am new to javascript, I am trying to write a function that calculate the factorial of a given number and also replace the fourth element. I expect when the code above is run, it should produce 6GeXmanX
but instead i am getting NaNXermXny
function Recursion(num) {
if (num=== 0 || num===1){
return 1;
}
result= Recursion(num-1)*num;
results = result + 'Germany'
const str = results.split('')
const nth = 4
var replaceWith = 'X'
for (var i = nth-1; i < str.length-1; i+=nth){
str[i]= replaceWith;
}
//y = (results.join(""))
return (str.join(""));
}
// code goes here
// keep this function call here
console.log(Recursion(3));
Upvotes: 2
Views: 82
Reputation: 46
This is your code:
function Recursion(num) {
//When this condition don't comply, the return of Recursion is str.join("")
//You can add a console.log to see for yourself
//So you need to split the functions
if (num === 0 || num === 1) {
return 1;
}
result = Recursion(num - 1) * num;
console.log("recursive")
results = result + 'Germany'
const str = results.split('')
const nth = 4
var replaceWith = 'X'
//It should be only str.length
for (var i = nth - 1; i < str.length - 1; i += nth) {
str[i] = replaceWith;
}
return (str.join(""));
}
console.log(Recursion(5))
So you need to do this modifications:
function Factorial(num){
return num < 2 ? num : num * Factorial(num-1)
}
function Replace(num){
const newString = (Factorial(num)+"Germany").split('')
const replaceWith = 'X'
let replaceEvery = 4
for (var i = replaceEvery - 1; i < newString.length; i += replaceEvery) {
newString[i] = replaceWith;
}
return (newString.join(""));
}
console.log(Replace(6));
Upvotes: 2
Reputation: 17424
First, you need to split the factorial
function into a separate function.
Second, in the for
condition, the i
should be i < str.length
not i < str.length - 1
as it will not iterate over the last letter.
function factorial(num) {
if (num=== 0 || num===1){
return 1;
}
return factorial(num-1)*num;
}
function func(num) {
let results = factorial(num) + 'Germany'
const str = results.split('')
const nth = 4
var replaceWith = 'X'
for (var i = nth-1; i < str.length; i+=nth){
str[i]= replaceWith;
}
//y = (results.join(""))
return (str.join(""));
}
// code goes here
// keep this function call here
console.log(func(3));
Upvotes: 3