[英]Recursion Stack Overflow Error Java
嘗試打印正整數n的前m倍時,遞歸方法中的堆棧溢出錯誤。 我如何解決它? 以下代碼在邏輯上已經正確:
import java.util.Scanner;
public class Exercise3
{
public static void main (String args[])
{
Scanner keyboard = new Scanner(System.in);
int n, m;
System.out.println("Please enter values of n and m: ");
n = keyboard.nextInt();
m = keyboard.nextInt();
// logic of code explained above
for(int i = (m -(m - 1)); i <= m; i++)
{
System.out.print(multiple(n * i) + ",");
}
}
// Now Write the Recursive method
public static int multiple(int n)
{
if(n == 0)
return 1;
else
return multiple(n);
}
}
這是非常不好的遞歸用法
public static int multiple(int n){ // once come into this method will never exit
return multiple(n); // again and again call multiple
}
此遞歸方法沒有退出條件。 您需要考慮退出條件以終止此遞歸調用。
編輯:用於您的編輯:
public static int multiple(int n) { // inside this method n is never change
if (n == 0)
return 1;
else
return multiple(n);// still no termination for the recursion call
}
您可能想這樣做:
for(int i = (m -(m - 1)); i <= m; i++)
{
System.out.print(multiple(n,i)+","); // call like this in you main method
}
這是遞歸函數:
public static int multiple(int m,int n) {
if (n == 1)
return m;
else
return m+multiple(m,n-1);
}
import java.util.Scanner;
public class Exercise3
{
public static void main (String args[])
{
Scanner keyboard = new Scanner(System.in);
int n, m;
System.out.println("Please enter values of n and m: ");
n = keyboard.nextInt();
m = keyboard.nextInt();
// logic of code explained above
for(int i = (m -(m - 1)); i <= m; i++)
{
System.out.print(n * i + ",");
}
}
}
//使用n = 2和m = 5來查看2的前5個倍數。我需要遞歸方法來執行相同的操作。 這是迭代的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.