return 来自 java 递归方法的值 when return 在数学表达式中
return value from recursive method in java when returning math expresion
public static void main(String[] args) {
System.out.println(f(3));
}//end main
public static int f(int i) {
if(i<=1) {
return 1;
}
else {
return(2+f(i-1));
}
}
当我将 3 作为参数时,这个函数调用 returns 5,但我不明白为什么
你输入 3,它减去 1 等于 2,然后进行递归,即 2 减 1 等于 1。最后它加上 2 + 2 + 1,等于 5。
下面是一个可能有助于解释操作顺序的片段。 JavaScript里面写的,但是递归是一样的
您对 f(3)
的调用必须先计算 f(2)
,然后才能 return 一个值。
反过来,f(2)
必须先计算 f(1)
,然后才能 return 一个值。
f(1)
是基本情况,指定等于 1
.
一旦f(2)
知道f(1) = 1
,它就可以完成自己的计算并且return (2 + 1) = 3
.
一旦f(3)
知道f(2) = 3
,它就可以完成自己的计算,return (2 + 3) = 5
就是你的结果。
function f(i) {
console.log(`f(${i}) called.`);
if (i <= 1) {
console.log(`f(${i}) returned 1.`);
return 1;
}
console.log(`Getting value of f(${i - 1}) because i = ${i} which is > 1.`);
let r = f(i - 1);
console.log(`f(${i}) used f(${i - 1}) = ${r} to calculate (2 + ${r}).`);
r = (2 + r);
console.log(`f(${i}) returned ${r}.`);
return r;
}
console.log(`Result: ${f(3)}.`);
评估过程如下:
f(3)
2 + f(2)
2 + (2 + f(1))
2 + (2 + 1)
2 + 3
5
public static void main(String[] args) {
System.out.println(f(3));
}//end main
public static int f(int i) {
if(i<=1) {
return 1;
}
else {
return(2+f(i-1));
}
}
当我将 3 作为参数时,这个函数调用 returns 5,但我不明白为什么
你输入 3,它减去 1 等于 2,然后进行递归,即 2 减 1 等于 1。最后它加上 2 + 2 + 1,等于 5。
下面是一个可能有助于解释操作顺序的片段。 JavaScript里面写的,但是递归是一样的
您对 f(3)
的调用必须先计算 f(2)
,然后才能 return 一个值。
反过来,f(2)
必须先计算 f(1)
,然后才能 return 一个值。
f(1)
是基本情况,指定等于 1
.
一旦f(2)
知道f(1) = 1
,它就可以完成自己的计算并且return (2 + 1) = 3
.
一旦f(3)
知道f(2) = 3
,它就可以完成自己的计算,return (2 + 3) = 5
就是你的结果。
function f(i) {
console.log(`f(${i}) called.`);
if (i <= 1) {
console.log(`f(${i}) returned 1.`);
return 1;
}
console.log(`Getting value of f(${i - 1}) because i = ${i} which is > 1.`);
let r = f(i - 1);
console.log(`f(${i}) used f(${i - 1}) = ${r} to calculate (2 + ${r}).`);
r = (2 + r);
console.log(`f(${i}) returned ${r}.`);
return r;
}
console.log(`Result: ${f(3)}.`);
评估过程如下:
f(3)
2 + f(2)
2 + (2 + f(1))
2 + (2 + 1)
2 + 3
5