最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

recursion - Javascript anonymous function error - Stack Overflow

programmeradmin1浏览0评论

I have been trying to use recursion to find the sum of a number using an anonymous function in javascript but I am getting the following error:

Uncaught SyntaxError: Unexpected token +

I want to use an anonymous function for this. Can anyone help me in finding what I am doing wrong here?

<script type="text/javascript">
    console.log(function (n) {
        if (n == 0) {
            return 1;
        }
        else {
            return function(n+function(n-1));
        }
    }(8));
</script>

I have been trying to use recursion to find the sum of a number using an anonymous function in javascript but I am getting the following error:

Uncaught SyntaxError: Unexpected token +

I want to use an anonymous function for this. Can anyone help me in finding what I am doing wrong here?

<script type="text/javascript">
    console.log(function (n) {
        if (n == 0) {
            return 1;
        }
        else {
            return function(n+function(n-1));
        }
    }(8));
</script>
Share Improve this question edited Dec 3, 2014 at 8:36 slevy1 3,8202 gold badges28 silver badges33 bronze badges asked Dec 3, 2014 at 7:07 rodrigorodrigo 131 silver badge4 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

There are several problems with what you're doing.

For starters, attempting to call the function recursively (function(n+function(n-1))) will result in a call stack size exceeded error because you're adding the sum to each argument passed to the recursive call. You probably want something closer to (n + function(n-1)).

However, this is still problematic, because you can't call an anonymous function recursively (except by using arguments.callee, which is disallowed in strict mode).

To do what it appears you're trying to do without giving a name to your function expression, you could do something like:

console.log(function(n) {
    if (n == 0) {
        return 1;
    }
    else {
        return n + arguments.callee(n-1);
    }
}(8))

However, you could also provide a name for your function expression to refer to in recursive calls, which will work in strict mode as well:

console.log(function foo(n) {
    if (n == 0) {
        return 1;
    }
    else {
        return n + foo(n-1);
    }
}(8))

edited: In the base case (n == 0) you probably want to return 0 instead of 1 if your goal is to get the sum of all whole numbers from 0 to n.

  console.log(function fn(n) {
      if (n == 0) {
          return 1;
      } else {
          return (n + fn(n - 1));
      }
  }(8));

Error in this line function(n+function(n-1)), because this is syntax error, you can not call function like you do. In our case you should add for self-Invoking function - name, and use it for recursion call stack

When I revised the anonymous function to use the correct recursion, namely return n + f(n-1), I discovered that oddly enough the following code works without resorting to arguments.callee as long as the script resides on an HTML page. Note: it still does not work with console.log.

One more thing, if the code in this instance is attempting to get the sum of numbers ranging from eight to one, then when n equals zero, the return value should be zero and not one for the sum to be mathematically correct.

var f = function (n) {
        if (n == 0) {
            return 0;
        }
        else {
            return n + f(n-1);
        }
};

var res = f(8); // 36

See live example at http://jsfiddle/d5k4ag8w/11/ Also, this article provides an easy way to figure out the math using just pencil and paper :)

发布评论

评论列表(0)

  1. 暂无评论