C********a 发帖数: 10 | 1 如果有一个recursive call 在终结的时候返回一个表达式的值 怎样才能把这个结果一
层层传递出去?
比如这个找in order tree最小值的方法:
public treeNode treeMinimumRecursive(treeNode root){
if (root.left=NULL)
return root;
else
treeMinimumRecursive(treeNode root.left);
}
开始做条件判断,treeNode.left 不为空就一直调用自己, 直到为空以后返回当前的
treeNode。
然后上一层拿到这个返回值,怎么才能把它作为自己的返回值再传给上层的函数?
网上看的似乎是把最后一行前加return 改成 return treeMinimumRecursive(treeNode
root.left);
这个return的是一个方法 而不是一个表达式 这种情况有定义吗
门外汉刚开始看 请各位拍砖 |
s******u 发帖数: 501 | 2 else里面的那个也必须要有return,不然你这个函数就有可能没有返回值了,自然也得
不到正确结果
返回的还是表达式,而不是方法。这个表达式是treeMinimumRecursive(treeNode root
.left)这个函数的返回值。可以把这个return写成两步,看的就清楚了
auto r = treeMinimumRecursive(treeNode root.left);
return r; |
G***l 发帖数: 355 | 3 基本概念。纸上画画stack。
比如一个递归函数
factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
在main里调用
int param = 2
result = factorial(param)
程序会产生stack结构:
stack of main
------------------------
stack main:param=2
调用factorial(2),进入stack of f(2)
------------------------
|stack f2:n=2
|n不等于1执行n*f(1),进入stack of f(1)
| ------------------------
| |stack f1:n=1
| |stack f1:a_const_variable=1
| |n=1返回a_const_variable=1, 销毁stack of f(1)
| ------------------------
|f(1)返回1,回到stack of f(2),f(2)将返回值保存在某temp_variable_a
|stack f2:temp_variable_a=1
|继续执行,n*temp_variable_a得到结果保存在某temp_variable_b
|stack f2:temp_variable_b = n*temp_variable_a = 2
|返回temp_variable_b=2, 销毁stack of f(2)
-------------------------
f(2)返回2,回到stack of main,买你将返回值保存在某temp_variable_c
stack main:temp_variable_c=2
执行result=temp_variable_c
stack main:result=2
继续执行main。。。。
-------------------------------
值
【在 C********a 的大作中提到】 : 如果有一个recursive call 在终结的时候返回一个表达式的值 怎样才能把这个结果一 : 层层传递出去? : 比如这个找in order tree最小值的方法: : public treeNode treeMinimumRecursive(treeNode root){ : if (root.left=NULL) : return root; : else : treeMinimumRecursive(treeNode root.left); : } : 开始做条件判断,treeNode.left 不为空就一直调用自己, 直到为空以后返回当前的
|
C********a 发帖数: 10 | 4 谢谢 看懂了 我水平太臭
【在 G***l 的大作中提到】 : 基本概念。纸上画画stack。 : 比如一个递归函数 : factorial(n): : if n == 1: : return 1 : else: : return n*factorial(n-1) : 在main里调用 : int param = 2 : result = factorial(param)
|