Javascript 我不能在已处理的递归上返回实变量?

Javascript 我不能在已处理的递归上返回实变量?,javascript,recursion,Javascript,Recursion,我一直在用javascript做这个递归;但是,我无法在返回时返回x的实际值。相反,它返回处理后的值。代码正在执行它的任务,但它在递归中返回已处理的变量。我试图将变量存储在x上,但仍然失败 我想返回最后一个调用堆栈以获取实际变量 此代码返回0为偶数,1为偶数-如何更改代码以使这些情况按预期工作 function isEven(x) { var y =x; if (x<0) { x = x * -1; } if ( x===0 ) {

我一直在用javascript做这个递归;但是,我无法在返回时返回
x
的实际值。相反,它返回处理后的值。代码正在执行它的任务,但它在递归中返回已处理的变量。我试图将变量存储在x上,但仍然失败

我想返回最后一个调用堆栈以获取实际变量

此代码返回
0为偶数
1为偶数
-如何更改代码以使这些情况按预期工作

function isEven(x) {
    var y =x;
    if (x<0) {
        x = x * -1; 
    }
    if ( x===0 ) {
        return console.log(y+' is Even');
    } else if( x===1 ) {
        return console.log(y+' is Odd');
    } else {  
        return isEven(x-2); 
    }

    // →
    console.log(isEven(10));
    console.log(isEven(-11));
}
函数isEven(x){
变量y=x;

如果(x我假设你要做的是打印给定的原始值,而不是递归的最终值。但是你每次递归时都重新分配
y
,所以它不包含原始值

一种解决方案是将函数拆分为一个主函数和一个递归内部函数

function isEven(x) {
    var y =x;
    function isEvenRecurse(x) {
        if (x<0) {
            x = x * -1; 
        }
        if(x===0) {
            return y+' is Even';
        } else if(x===1) {
            return y+' is Odd';
        } else {
            return isEvenRecurse(x-2);
        }
    }
    isEvenRecurse(y);
}
函数isEven(x){
变量y=x;
函数IsEventRecurse(x){

如果(x我假设你要做的是打印给定的原始值,而不是递归的最终值。但是你每次递归时都重新分配
y
,所以它不包含原始值

一种解决方案是将函数拆分为一个主函数和一个递归内部函数

function isEven(x) {
    var y =x;
    function isEvenRecurse(x) {
        if (x<0) {
            x = x * -1; 
        }
        if(x===0) {
            return y+' is Even';
        } else if(x===1) {
            return y+' is Odd';
        } else {
            return isEvenRecurse(x-2);
        }
    }
    isEvenRecurse(y);
}
函数isEven(x){
变量y=x;
函数IsEventRecurse(x){

如果(x您无法使用代码访问初始值

实现此目标的最简单方法是添加一个函数参数,该参数将存储原始值:

函数isEven(x,首字母){
initial=initial | | x;//因此isEven(10)=>isEven(10,10)

如果(x您无法使用代码访问初始值

实现此目标的最简单方法是添加一个函数参数,该参数将存储原始值:

函数isEven(x,首字母){
initial=initial | | x;//因此isEven(10)=>isEven(10,10)

如果(xIt不清楚您的问题是什么。我看到您返回
console.log
执行结果(未定义)的问题,然后您尝试输出它。您的函数必须返回一个字符串,然后由
console.log
输出。很抱歉,这是调试器;我忘记了。这是一个用于演示的javascript编译器,我做了编辑对于您的问题:您忘记关闭
返回isEven(x-2)的
else
括号
-这可能解决了您的问题?输出仍然是0和1,而且,当我返回时,为什么会有一个未定义的值?@Xenyal-我已经回滚了您的编辑。OP询问的是他们自己的代码,而不是您认为他们的代码应该是什么。如果您认为括号是问题所在,请将其作为一个答案或作为一个注释发布。(尽管在
{}
中简单地包装
return
,根本不会改变函数的操作…)不清楚您的问题是什么。我发现您返回
console.log
执行结果(未定义)的问题,然后您尝试输出它。您的函数必须返回一个字符串,然后由
console.log
输出。很抱歉,这是调试器;我忘记了。这是一个javascript编译器,用于演示我编辑过的您的问题:您忘记关闭
返回isEven(x-2)的
else
括号
-这可能解决了您的问题?输出仍然是0和1,而且,当我返回时,为什么会有一个未定义的值?@Xenyal-我已经回滚了您的编辑。OP询问的是他们自己的代码,而不是您认为他们的代码应该是什么。如果您认为括号是问题所在,请将其作为一个答案或作为一个注释发布。(尽管在
{}
中简单地包装
return
,根本不会改变函数的操作…)