2015-04-12 7 views
0

У меня есть эта странная проблема. Я не могу объяснить себе, когда используется короткий, если внутри возврата. Этот код (см. Ниже) должен возвращать значение 55, но вместо этого он просто возвращает аргумент 10, который я передал ему по значению.Возврат внутрь рекурсивной функции не работает, если используется, если используется

Я уже отлаживал функцию, и рекурсия работает по назначению, но никогда не добавляет + 1 к возвращаемому значению.

public static int add(int i) { 
    return i == 0 ? 0 : add(i - 1) + 1; 
} 

public static void main(String[] args) { 
    System.out.println(add(10)); // returns 10 
} 

Почему это не работает?

+1

Кажется, вы вычитанием 1 из 'i' перед добавлением 1, с' (i - 1) + 1' – JonasCz

+0

Сумма чисел '1 + 2 + 3 + 4 + ... + n' равна' n (n + 1)/2' Вычисление этого было бы намного быстрее. – Obicere

+2

@ Obicere, но тогда это не было упражнением в рекурсии :) –

ответ

6

Ваш код делает то, что вы ему рассказываете. На каждом этапе рекурсии он уменьшает счетчик и добавляет 1 к результату - поскольку он подсчитывает i раз, он вернет i.

Что вы пытаетесь сделать, это sum цифры от 0 до i. Для этого вам нужно добавить i, а не 1 к сумме каждый раз.

public static int add(int i) { 
    return i == 0 ? 0 : add(i - 1) + i; // <- like this 
} 

Поскольку это, скорее всего, это упражнение, рассмотреть возможность реализации факториала рекурсивно, чтобы убедиться, вы понимаете концепцию (то есть функция, которая принимает n и возвращает n * (n-1) * (n-2) ... и так далее.

+0

Спасибо! Я собирался проверить, могу ли я _shortify_ код, который у меня уже был, и допустил ошибку при его преобразовании. – Byte

Смежные вопросы