① 關於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