如何解决为什么对这个递归函数的答案是8?
这是一个简单的递归问题,我已经坚持了一段时间。基本上,我了解f(4)如何返回f(3)+ f(3),并且它们将返回f(2)+ f(2)+ f(2)+ f(2)。但是,如果将这些全部加在一起,答案是否会大于8?我是递归的新手,但仍然想围绕这个概念。
public class test{
public static int f(int n){
if(n <= 1){
return 1;
}
return f(n-1)+f(n-1);
}
public static void main(String[]args){
System.out.println(f(4));
}
}
解决方法
让我们从另一个方向来看。
f(1) = 1
f(2) = f(1) + f(1) = 2
f(3) = f(2) + f(2) = 2 + 2 = 4
f(4) = f(3) + f(3) = 4 + 4 = 8
由此,我们可以看到答案是8。如果您希望得到不同的答案,您希望得到什么答案,以及如何得出答案?
,答案始终是f(n) = 2^(n-1)
f(4) = 2^(4-1) = 2^3 = 8
如果将调用分成单独的语句,则更易于查看。
public static void main(String[] args) {
System.out.println(f(4));
}
public static int f(int n) {
if (n <= 1) {
return 1;
}
int r = f(n - 1);
int s = f(n - 1);
System.out.println("(r + s) = " + (r + s));
return r + s;
}
打印
(r + s) = 2
(r + s) = 2
(r + s) = 4
(r + s) = 2
(r + s) = 2
(r + s) = 4
(r + s) = 8
8
不同的人响应不同的输出,因此您可以使用自己的打印语句进行更改。我通常发现了解任何程序的逻辑流程最有用的方法是简单地在纸上写下每个步骤的状态并以此方式进行操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。