看到你问的问题,我想你应该是初学编程吧。 你这个问题实际上表现出来的是你对递归的不理解首先,Java的static和C语言的static根本不同,Java的static只是表示声明的域或方法是类的而不是对象的至于递归,我简单的和你说一下 函数递归的实质就是函数层层递进 举个例子:void func(int i) { if (i == 0) { return; } else { printf("This is func %d\n", i); func(i-1); printf("This is func %d\n", i); } }调用 func(5),结果是什么?// Output This is func 5 This is func 4 This is func 3 This is func 2 This is func 1 This is func 1 This is func 2 This is func 3 This is func 4 This is func 5 然后从本质上分析一下递归(需要一定的汇编语言知识): 一个函数中的变量称为局部变量,局部变量保存在栈中,当调用一个函数时,其拥有的局部变量入栈,而当函数返回时,其所拥有的局部变量便会出栈,所以说局部变量在函数外是不能被使用的。 结合上面的例子,调用func(5)时,传入的参数i=5入栈,当在func(5)中调用func(4)时,func(4)的参数i=4入栈,接下来func(4)返回,i=4出栈,程序继续从func(5)中的调用func(4)的下一句执行,这时的局部变量i仍然是在func(5)中之前入栈的i=5。 (为了便于理解,简化了很大一部分内容,事实上当调用一个函数时所做的操作比这些要多)我写的不见得好理解,自己网上 Google 一下,先搞懂了递归再说吧
你这个问题实际上表现出来的是你对递归的不理解首先,Java的static和C语言的static根本不同,Java的static只是表示声明的域或方法是类的而不是对象的至于递归,我简单的和你说一下
函数递归的实质就是函数层层递进
举个例子:void func(int i) {
if (i == 0) {
return;
} else {
printf("This is func %d\n", i);
func(i-1);
printf("This is func %d\n", i);
}
}调用 func(5),结果是什么?// Output
This is func 5
This is func 4
This is func 3
This is func 2
This is func 1
This is func 1
This is func 2
This is func 3
This is func 4
This is func 5
然后从本质上分析一下递归(需要一定的汇编语言知识):
一个函数中的变量称为局部变量,局部变量保存在栈中,当调用一个函数时,其拥有的局部变量入栈,而当函数返回时,其所拥有的局部变量便会出栈,所以说局部变量在函数外是不能被使用的。
结合上面的例子,调用func(5)时,传入的参数i=5入栈,当在func(5)中调用func(4)时,func(4)的参数i=4入栈,接下来func(4)返回,i=4出栈,程序继续从func(5)中的调用func(4)的下一句执行,这时的局部变量i仍然是在func(5)中之前入栈的i=5。
(为了便于理解,简化了很大一部分内容,事实上当调用一个函数时所做的操作比这些要多)我写的不见得好理解,自己网上 Google 一下,先搞懂了递归再说吧
结贴记得给个分哈~~~hi, 想问你个编程的问题,就是我发的这个帖子http://bbs.csdn.net/topics/390674192?page=1#post-396393786,能否帮忙看下,面试的时候让写的~谢过