2014-12-03 8 views
1

Это не домашнее задание, это просто практика. Мой первый способ написать:Рекурсия ... Я застрял

Напишите силу статического рекурсивного метода, которая принимает два аргумента int с именами x и p и возвращает x, умноженное на себя p раз.

Я сделал это, и вот код:

public static int power(int x, int p) 
{ 
    if(p==0) 
    { 
     return 1; 
    } 
    else 
    { 
     int result = x * power(x, p - 1); 
     return result; 
    }  
} 

Следующая проблема была:

Каждый уровень пирамиды представляет собой квадрат, так что если есть ˝n˝ уровни, нижний уровень имеет n * n шаров, а общее количество шаров равно (n * n) + (количество шаров в пирамиде высотой n - 1).

В пирамиде высотой всего один шар 1. Напишите статический рекурсивный метод getPyramidCount, который принимает один аргумент int, представляющий количество уровней в пирамиде, и возвращает общее количество шаров. (Используйте свой метод мощности выше квадратного числа.)

Я так расстроен, что понятия не имею, как это написать. Я знаю, что хочу сделать еще один метод, который включает в себя метод мощности, но я так невежественен. Вы можете мне помочь? На данный момент я чувствую, что видеть, что чей-то код для этого - единственный способ понять меня.

РЕДАКТИРОВАТЬ: Не означает, что там есть 2. Это должно быть х! Я делал 2 к 8-й силе и забыл положить x вместо 2!

+0

Ваш код не разрешает данную проблему. [3 до степени 3 не 8] (http://ideone.com/u4FLV9) ... –

+1

Ваш метод мощности неправильный, как вы уже сказали. Что касается проблемы пирамиды, возможно, вам следует прочитать об этом сначала в [wikipedia] (http://en.wikipedia.org/wiki/Square_pyramidal_number), а затем вы можете придумать идею. – RealSkeptic

+0

Если вы действительно хотите, чтобы ваши ноги владели практикой рекурсии, попробуйте написать метод, который сканирует каталог и все его подкаталоги (и все их подкаталоги и т. Д.) Для файлов с именами, начинающимися с определенной строки. Это очень легко визуализировать и, таким образом, понять применение рекурсии. – Gimby

ответ

2

Прежде всего эта линия:

int result = 2 * power(x, p - 1); 

должен быть таким:

int result = x * power(x, p - 1); 

но о вашей пирамиды, ваш код имеет только один вход со значением n и возвращаемое значение, как вы сказали, n + пирамида (n-1);

+0

Пожалуйста, не давайте людям дословные решения домашних заданий/проблем с практикой ... –

+1

Хорошо, я изменю код пирамиды – Lrrr

+0

Я знаю, что люди на этом сайте не любят других, раздающих код, но это для практики. Я вообще не включаю этот код. Рекурсия кажется запутанной концепцией, и мой профессор не мог объяснить это хорошо, и учебник был запутанным. Благодарим вас за ваш ответ. У меня будет это, чтобы оглянуться назад и обратиться, пока я занимаюсь рекурсией. – NewbieNick

3

Не умножайте на 2. Это x * xp раз. Например,

public static int power(int x, int p) { 
    if (p <= 0) { 
     return 1; 
    } 
    return x * power(x, p - 1); 
} 
1

Прежде всего, ваш power неправ. Он вычислил 2^р вместо х^р.

Изменить

int result = 2 * power(x, p - 1); 

в

int result = x * power(x, p - 1); 

Теперь, для пирамиды вопроса, рекурсия: numBalls(n) = n^2 + numBalls(n-1).

Поэтому метод будет выглядеть следующим образом:

public static int numBalls (int n) 
{ 
    if (n==1) 
     return 1; 
    else 
     return power(n,2) + numBalls(n-1); 
} 
Смежные вопросы