Javascript 我不能在已处理的递归上返回实变量?
我一直在用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 ) {
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
,根本不会改变函数的操作…)