理解java palidrome输出时遇到问题
我有一个简单的java程序,它接受一个数字并根据这个数字执行一个函数理解java palidrome输出时遇到问题,java,recursion,Java,Recursion,我有一个简单的java程序,它接受一个数字并根据这个数字执行一个函数 public class Palidrome { public static void main (String[] args) { int N = 3; System.out.println(palidrome(N)); } public static String palidrome(int i) { if (i == 0) return "S"; if (i == 1) return "
public class Palidrome {
public static void main (String[] args) {
int N = 3;
System.out.println(palidrome(N));
}
public static String palidrome(int i) {
if (i == 0) return "S";
if (i == 1) return "T";
return palidrome(i-2)
+ palidrome(i-1)
+ palidrome(i-2);
}
}
对于这个例子,N=3,输出为“tst”。如果N变为5,则输出为“TST”等
我很难弄明白为什么会这样。如果N=5,则palidrome(i-1)和palidrome(i-2)永远不会到达(i==0)或(i==1),因此理论上不应该返回任何内容
提前谢谢 让我们逐行讨论N=5时发生的情况
希望这有助于为您演示递归。让我们逐行讨论N=5的情况
希望这有助于为您演示递归。对
palidrome
的每次连续递归调用都会使您更接近基本情况,如下所示:
if (i == 0) return "S";
if (i == 1) return "T";
从理论上说
回传道(i-1)和回传道(i-2)永远不会达到(i==0)或(i==
(一)
是错误的,因为最终将达到这些语句,但在i
更改以满足条件之后
vari
将如何改变你可能想知道的!通过这句话:
return palidrome(i-2)
+ palidrome(i-1)
+ palidrome(i-2);
在这里,您递归地调用palidrome
,但是(i
减少),这将最终导致基本情况
如果你的函数从来没有碰到过基本情况
,那么你将有一个无限递归,而这里的情况并非如此
为了简化事情,让我们看看这个例子: 假设你有一个慷慨的邻居,如果你拜访他一次,他会给你一个苹果,如果你拜访他两次,他也会给你一个苹果,然后他会开始给你和他上次给你的一样多的苹果(这实际上是一个
fibonacci
序列),因此一般情况如下:
numberofapplesthattyouget=numberofapplesthattyou'veGotIn(当前访问编号-1(这是最后一次访问))+numberofapplesthattyou'veGotIn(当前访问编号-2)
让我们假设
currentVisitNumber=n和numberOfApplesThatYouGet=fib方法
所以一般规则是-->
但是我们仍然需要一个基本情况
来终止无限递归,这里基本情况是您的第一个访问条件,它是
if(n==0) return 0;//if you didn't visit him you'll get nothing
if(n==1) return 1;//if you did you'll get an apple
因此,方法如下所示:
public int fib(int n) {
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
假设你去了他三次,你会得到多少苹果
fib(3)->fib(2)+fib(1)
fib(2)->fib(1)+fib(0)->1+0->1
fib(1)->1
1+1=2
#done
另外,请看一下这一点,以便更好地理解。对回文
的每次连续递归调用都会使您更接近基本情况,如下所示:
if (i == 0) return "S";
if (i == 1) return "T";
从理论上说
回传道(i-1)和回传道(i-2)永远不会达到(i==0)或(i==
(一)
是错误的,因为最终将达到这些语句,但在i
更改以满足条件之后
vari
将如何改变你可能想知道的!通过这句话:
return palidrome(i-2)
+ palidrome(i-1)
+ palidrome(i-2);
在这里,您递归地调用palidrome
,但是(i
减少),这将最终导致基本情况
如果你的函数从来没有碰到过基本情况
,那么你将有一个无限递归,而这里的情况并非如此
为了简化事情,让我们看看这个例子:
假设你有一个慷慨的邻居,如果你拜访他一次,他会给你一个苹果,如果你拜访他两次,他也会给你一个苹果,然后他会开始给你和他上次给你的一样多的苹果(这实际上是一个fibonacci
序列),因此一般情况如下:
numberofapplesthattyouget=numberofapplesthattyou'veGotIn(当前访问编号-1(这是最后一次访问))+numberofapplesthattyou'veGotIn(当前访问编号-2)
让我们假设
currentVisitNumber=n和numberOfApplesThatYouGet=fib方法
所以一般规则是-->
但我们仍然需要一个基本案例