PROLOG Рекурсивное умножение переполнения стека

import java.util.*;

public class NumberToWord {
    public void numberToword(int n, String ch) {
        String one[] = {" ", " one", " two", " three", " four", " five", " six", " seven", " eight", " Nine", " ten", " eleven", " twelve", " thirteen", " fourteen", "fifteen", " sixteen", " seventeen", " eighteen", " nineteen"
        };
        String ten[] = {" ", " ", " twenty", " thirty", " forty", " fifty", " sixty", "seventy", " eighty", " ninety"};
        if (n > 19) {
            System.out.print(ten[n / 10] + " " + one[n % 10]);
        } else {
            System.out.print(one[n]);
        }
        if (n > 0) {
            System.out.print(ch);
        }
    }
    public static void main(String[] args) {
        int n = 0;
        Scanner s = new Scanner(System.in);
        System.out.print("Enter an integer number: ");
        n = s.nextInt();
        if (n <= 0) {
            System.out.print("Enter numbers greater than 0");
        } else {
            NumberToWord a = new NumberToWord();
            System.out.print("After conversion number in words is :");
            a.numberToword((n / 1000000000), " Hundred");
            a.numberToword((n / 10000000) % 100, " crore");
            a.numberToword(((n / 100000) % 100), " lakh");
            a.numberToword(((n / 1000) % 100), " thousand");
            a.numberToword(((n / 100) % 10), " hundred");
            a.numberToword((n % 100), " ");
        }
    }
}
3
задан llamagish 1 March 2019 в 02:20
поделиться

1 ответ

Проблема в том, что

multiply(A,B,C) :- D is B-1, multiply(A,D,E), C is E+A.

Этот код не имеет ограничения B > 0, которое могло бы предотвратить переполнение стека.

Вы можете изменить код следующим образом:

multiply(A,B,C) :- B > 0, D is B-1, multiply(A,D,E), C is E+A.

Кроме того, эта строка multiply(A,0,0). выдает одноэлементное предупреждение, поэтому вы можете изменить его на multiply(_,0,0)

Примечание : я написал ограничение B > 0, полагая, что вы называете предикат multiply(5,1,A).

0
ответ дан Koralp Catalsakal 1 March 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: