[英]Java : Recursion -While Loop Vs If Loop
代碼設計1:完美工作
public static void main (String[] args)
{
recursion(2);
}
public static void recursion(int num)
{
if (num > 0)
{
recursion( num - 1 );
System.out.println(num);
}
}
代碼設計2:無限循環。 ?
public static void main (String[] args)
{
recursion(2);
}
public static void recursion(int num)
{
if (num == 0) return;
while (num > 0)
{
recursion( num - 1 );
System.out.println(num);
}
}
1.首先, if
不是Not循環 ,則只有for
循環, for-each
, while
循環和do-while
循環。
2.第二個代碼進入無限循環的原因是,您永遠不會減少 num
的值 。
做這個....
while (num > 0)
{
recursion( num - 1 );
System.out.println(num);
num = num - 1; // Decrementing the value of num by 1
}
輸入while循環數大於零且其值不變。
num
的value
在recursion
方法中傳遞后不會更改。
if (num == 0) return;
while (num > 0)
{
recursion( num - 1 );
System.out.println(num);
num--; // add this line.
}
num的值在循環內不變。 因此,它一直循環播放。
while (num > 0)
{
recursion( num - 1 );
System.out.println(num);
}
在您的while循環中,您將num傳遞2。 2始終大於0,因此進入無限循環;
為了避免無限循環,您可以更改num變量的值;
while (num > 0)
{
recursion( num - 1 );
System.out.println(num);
num--;
}
無論使用循環還是遞歸,都不要同時使用它們。
通常,如果可以使用循環來執行其期望的操作,則他不再考慮遞歸,因為使用循環更快且開銷更少。
回到您的問題:
1.無限循環是不可避免的。 如在循環中, num
並沒有減少。
2.當然會有一些返回,但是從num = 2
和num = 1
進入recursion
的情況下不會。
這是發生了什么:您輸入num = 2
的recursion
。 它調用num = 1
recursion
。 那里有無限循環,當然還有無限的回報。 但是沒有返回recursion(2)
回報。
原因是num是按值復制的,而不是對
recursion( num - 1 );
的引用
recursion( num - 1 );
編輯:是的,人們很樂意拒絕投票,不是嗎? 的確,引用值與按復制值不是正確的答案,但是在我對他的代碼示例的初步閱讀中,這似乎是對該特定問題的誤解。 我站得住了。
我不知道您為什么要通過所有這些操作來實現這樣的功能? 抱歉,如果您沒有問題,請給我一個很好的建議。
public static void main(String[] args){
countdown(10);
}
public void countdown(int num){
for(int i = num; i >= 0; i--){
System.out.println(num);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.