将罗马数字转换为阿拉伯数字——递归

问题描述

我是 JavaScript 新手,正在网站 https://www.jshero.net/koans/roman1.html 的帮助下学习。

练习是编写一个转换器,将罗马数字从字符串“CdlxXXIII”转换为阿拉伯数字。

我用一个有效的“while 循环”编写了一个代码,但网站希望我用递归函数来做。

这是我的代码

TemplateSyntaxError at /items/order/2546
Could not parse the remainder: '${data}' from '${data}'

(很抱歉 var 是德语)。

我对递归不是很熟悉,谁能给我一个例子,如何用一个例子来做?

问候马塞尔

解决方法

您可以通过将带有罗马符号的对象作为键和十进制值来稍微更改值的存储。

为了创建递归函数,您可以添加一个退出条件,这里只是检查空字符串并在这种情况下返回零。

然后检查对象中是否有两个字符,如果是,则取值并将再次调用该函数的结果与字符串的其余部分相加。

如果不只取第一个字符和值,则再次调用该函数以获取字符串的其余部分。

function roman(number) {
    const
        values = { I: 1,IV: 4,V: 5,IX: 9,X: 10,XL: 40,L: 50,XC: 90,C: 100,CD: 400,D: 500,CM: 900,M: 1000 },two = number.slice(0,2);

    if (!number) return 0;
    return two in values
        ? values[two] + roman(number.slice(2))
        : values[number[0]] + roman(number.slice(1));
}

console.log(roman('CDLXXXIII')); // 483