递归如何在以下代码中工作?

时间:2016-10-18 13:39:35

标签: java recursion

$('#YOUR_ELEMENT').editable({
    // ...
    source: function () {
        var items = {1: 'B.tech', 2: 'M.tech'};
        return Object.keys(items).map(function(x) {return items[x];});
    },
    // ...
});

在上面的代码中,你好打印n次(我得到),世界打印n + 1次(我不打算)得到所有)。当n = 0时,不应该只打印一次吗?我的意思是它没有返回任何调用函数。 谢谢。

3 个答案:

答案 0 :(得分:4)

你正在递归地调用一个函数,如果没有早期返回或每次打印被调用时会出现任何条件,它将打印" world"。
为了说清楚,如果是printf("世界);在其他内部,它只打印一次。

if (n>0)
{
  printf(“hello”);
  print(n-1);
}else{
  printf(“world”);
}

答案 1 :(得分:1)

在函数内部定义函数时发生递归。在您的函数中,每次n > 0您将printf("hello");,然后使用n-1再次调用自己。请记住,您的函数将继续调用自身,直到n is equal to 0。但是在n is equal to 0的最后一种情况下,if语句将失败并继续到方法中的最后一行printf("hello")。由于您的方法签名无效,即使您没有明确声明返回语句,也会导致该方法完成。当方法完成时,我们递归地冒泡并完成每个方法的其余部分。在这种情况下,方法的其余部分将为printf("world"),打印时间超过printf("hello")

答案 2 :(得分:1)

  

你好打印了n次(我得到了)并且世界被打印了n + 1次(我根本没有得到)。

这是在你的情况下执行指令的方式。为[n, 1]执行“hello”并为[0, n]执行“world”。

n : printf("hello");
    n-1 : printf("hello");
          n-2 : printf("hello");
                ....
                    2 : printf("hello");
                        1 : printf("hello");
                            0 : printf("world");  << Difference is here
                        1 : printf("world");
                    2 : printf("world");    
                ....                            
          n-2 : printf("world");
    n-1 : printf("world");
n : printf("world");