2016-05-18 2 views
1

Учитывая два числа, скажем start = 1 и end = 4, я пытаюсь подсчитать все числа последовательно, а затем вниз. Нет перекручивание не допускаетсяПодсчет чисел вверх и вниз с использованием рекурсии

1 2 3 4 3 2 1

Я пытался писать функцию рекурсии. Функция подсчитывает штраф и печатает 1 2 3 4, но когда я пытаюсь отсчитать, я ожидаю 4 3 2 1, но я попадаю в бесконечный цикл. Причина в том, что начальное значение теряется в рекурсии, и я не знаю, где остановиться при подсчете снизу вверх.

Я провел 4 часа на этом. Можем ли мы сделать это в рекурсии? Рекурсия в одну сторону

public static void countUpDown(int start, int end) { 
    //to pring bottom up -> 4 3 2 1 
    if (start > end && end > 0) { 
     System.out.println(end - 1); 
     countUpDown(start, end - 1);  
    } 

    //to print up 1 2 3 4 
    if (start <= end) { 
     System.out.println("-->" + start); 
     countUpDown(start + 1, end); 
    } 
} 
+0

любая помощь в том, чтобы поставить меня в правильном направлении поможет –

ответ

4

Вам просто нужно использовать рекурсию для подсчета. Затем, когда функция возвращается, вы находитесь на своем пути. Это может быть достигнуто с:

public void countUpAndDown(int start, int end) { 
    System.out.println(start); 
    if (end == start) return; 
    countUpAndDown(start+1, end); 
    System.out.println(start); 
} 
+0

Печать работает, но я думаю, что это была скорее проблема алгоритма, чтобы рекурсивно идти вверх и вниз, а не вопрос правильной печати. Посмотрим, хватит ли ему. +1 – UDKOX

0

Вы можете быть в состоянии установить его в подсчитывать из 1-> 3 и> = 4 сделать - вниз к 1.

+0

Я ответил вам здесь –

0

попробовать этот

private static int CountUpAndDown(int end, int first, int start) 
    { 
     if(end==first) 
     { 
      return -1; 
     } 
     if (start > end) 
     { 
      System.out.println(--end); 
     } 
     else { 
      System.out.println(start++); 
     } 
     return CountUpAndDown(end, first, start); 
    }