Рекурсия Помощь Пожалуйста

0

Я пытаюсь выяснить следующую проблему для предстоящего теста. Я искал везде, и я понимаю основы рекурсии. То, что я не понимаю для этого конкретного вопроса, - это значение int n и int k соответственно. У меня есть ответ на этот вопрос, поскольку это вопрос практики, но я понятия не имею, как был найден ответ.

// Precondition: n and k are non-negative integers
int f(int n, int k) {
    if (k * n == 0)
         return 1
    else
         return f(n - 1, k - 1) + f(n - 1, k)
}

Какое значение возвращается вызовом f(4, 2)?

  • 11
    Просто смоделируйте это на бумаге (не так много рекурсий для случая 4,2)
  • 0
    Для таких проблем, это помогает отследить, что происходит на бумаге. Составьте таблицу со столбцами для n и k, а также строку для каждого вызова функции. Проследите, какая строка является родительской для каких других строк (т. Е. Какой f вызвал какой другой f - это легко увидеть, если сделать отступ для каждого вызова относительно строки функции, которая его сделала). В итоге вы построите полное дерево вызовов и увидите, как распространяются значения.
Показать ещё 3 комментария
Теги:
recursion

2 ответа

3
Лучший ответ

Я не уверен, в чем проблема

f(4,2)=f(3,1)                 + f(3,2)
      =(f(2,0)+f(2,1)        )+ (f(2,1)        +f(2,2))
      =(1     +(f(1,0)+f(1,1))+((f(1,0)+f(1,1))+(f(1,1)+f(1,2))
      =(1     +   1   +(1+1)) +(   1   +(1+1)  + (1+1) +1 + 1 ))
      =11 
  • 4
    Хорошо, что ты делаешь домашнее задание другим людям бесплатно, я буду иметь в виду тебя.
  • 1
    ... надеюсь, вы также сделаете свою последующую работу, как хороший сотрудник.
Показать ещё 6 комментариев
4

Посмотрите, как это называется.

f (4,2) переходит во 2-й блок, вызывает f (3,1) +f (3,2)

f (3,1) вызывает f (2,0) +f (2,1) = 1 +f (1,0) +f (1,1) = 1 + 1 +f (0,0 ) +f (0,1) = 1 + 1 + 1 + 1 = 4

f (3,2) вызывает f (2,1) +f (2,2) = f (1,0) +f (1,1) +f (1,1) +f (1, 2) и т.д.

Вы должны быть в состоянии работать здесь.

  • 1
    +1 один, потому что вы оставили что-то для ОП, чтобы сделать ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню