① 关于java中的递归
hi(n
+
1);
System.out.println("你好"
+
n);
这两句调换一下,就不会反了。
因为最后一个递归调用最先返回,而第一次打印就是在这个返回之后调用的。
执行过程:
main->hi(1)->hi(2)->hi(3)...hi(20)。
hi(19):
hi(20)返回,
print(19).
返回
hi(18):
hi(19)返回,
print(18).
返回
...
hi(1):hi(2)返回,print(1).返回
main:
下一句,退出.
递归只重复函数的内容。
如果是非引用型参数,其值在递归返回后不会受影响。这个跟普通的函数调用没有区别。
但是,递归需要注意两个基本问题:
1)
必须要有终止条件。
2)
递归层次不能太深,否则可能引起调用栈溢出,导致程序崩溃。
② java 中的递归调用的问题
首先MAIN函数中调用 hi(10)方法时传到
Recursion1 的hi()中的参数是n=10
if(n<=0) //x1 条件不成立
return ; //x2 这条语句不执行
hi(n-1); 再次调用hi() 参数10-1=9
进入hi()方法中的参数是n=9
同样判断不成立 再次调用hi()方法
。。。。。。。略(基本意思同上)
当n=0时 if(n<=0) //x1 条件成立
return ; //x2 这条语句执行 返回上级操作
上一级操作是什么呢???
当然是 n=1时啦 就是调用hi(1-1);方法时 输出:System.out.println("你好"+n);
然后逐级返回 就会依次把语句打印出来啦
③ java 函数返回值为String要求递归
不是返回值不是字符串,而是你的if条件不全,添加一个return 就好了。代码修改如下:
public static String invert(String str, int i){ //尾递归,作用是把“12345”转换为“54321”
if(i>1){
return str.substring((i-1),i) + invert(str,--i);
}
if(i==1){
return str.substring(0,1);
}
return "";
}
④ java方法递归调用
1.当n=1时,返回1
2.当n>1时,返回n+(n-1)
最简单的了,还有个有名的数列递归叫做“斐波那契”数列递归
⑤ JAVA中的递归调用问题
class Fibi
{ public long fibinacii(int n)
{ long c=0;
if(n==1||n==2)
c=1;
else
c=fibinacii(n-1)+fibinacii(n-2);
return c;
}
}
public class Fibinacci
{ public static void main(String args[])
{ Fibi a=new Fibi();
for(int i=1;i<=6;i++)
{ System.out.print(" "+a.fibinacii(i));
}
}
}
这个是用数组实现的,你原来的程序重复的显示了两次!大概前面声明和函数表达有问题.还有一种就是"{""}"位置不太合适!但是我也是初学者,所以能力有限!但这个程序我已调试过了!应该没什么问题!
⑥ java 用递归方法返回了一个String,如果得到里面的值sum
1、你这种没必要写递归
2、再写一个方法返回sum或者在这个方法返回的基础上使用substring截取出sum然后转换为你要的类型,比如int什么的就可以比较了。
由于java只能return一个值。
⑦ java递归,return问题
你得明白递归是如何运算的。
以第一个递归的运算方式如下
5*d(4)
5*(4*d(3))
5*(4*(3*d(2)))
5*(4*(3*(2*1)))
得120