#python
def max_(lst):
  if len(lst) == 0:
    return None
  if len(lst) == 1:
    return lst[0]
  else:
    sub_max = max_(lst[1:])
    return lst[0] if lst[0] > sub_max else sub_max

//java
import java.util.Arrays;

public class RecursiveMax {

    private static int max(int[] list) {
        if (list.length == 2) {
            return list[0] > list[1] ? list[0] : list[1];
        }

        int subMax = max(Arrays.copyOfRange(list, 1, list.length));
        return list[0] > subMax ? list[0] : subMax;
    }

    public static void main(String[] args) {
        System.out.println(max(new int[]{1, 5, 10, 25, 16, 1})); // 25
    }
}
//C++
#include <iostream>
#include <vector>
#include <stdexcept>

using std::cout;
using std::endl;

template <typename T>
T max(std::vector<T> arr) {
    if (arr.empty()) throw std::invalid_argument("Cannot select max value from empty sequence");
    if (arr.size() == 1) return arr.at(0);

    T back = arr.back();
    arr.pop_back();

    T sub_max = max(arr);
    
    return back > sub_max ? back : sub_max;
}

int main() {
    std::vector<int> array = {1, 5, 10, 25, 16, 1};
    cout << max(array) << endl;

    std::vector<int> negative_array = {-1, -5, -10, -25, -16};
    cout << max(negative_array) << endl;
}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐