Объяснение кода рекурсии - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть такая рекурсия, вычисляет наибольший элемент:
#include <stdio.h>
 
int bigger(int a, int b){
  if( a > b)
    return a;
  else
    return b;
}
 
int max(int* nums, int len){
  if(len == 1){
    return *nums;
  } else{
    return bigger(*nums, max(nums + 1, len - 1));
  }
}
 
int main(){
  int nums[6] = {100, 1, 500, -20, 66, 4200};
  int len = 6;
 
  printf("%d\n", max(nums, len));
  return 0;
  
}
Эта строчка непонятная:
    return bigger(*nums, max(nums + 1, len - 1));
Можете пошагово расписать что происходит в этой строчке? Т.е. получается как бы так? 1) bigger (100,max(num[1],5) ) // но ведь bigger принимает 2 int аргумента bigger(int a, int b), что он примет за значение b? 2) bigger (100, max(num[2],4) ) 3) bigger (500, max(num[3],3) ) 4) bigger (500, max(num[4],2) ) 5) bigger (500, max(num[5],1) ) 6) bigger (500, max(num[6],0) ) возвращает 4200. И возвращаемое return с функции bigger куда идет?
Идеи?

Решение задачи: «Объяснение кода рекурсии»

textual
Листинг программы
bigger(num[0], bigger(num[1], bigger(num[2], bigger(num[3], bigger(num[4], num[5])))));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы