计算数组的深度

时间:2019-07-07 14:00:04

标签: algorithm

enter image description here

我想根据图像中的公式计算数组的深度。 我已经实现了以下代码,但无法获得正确的结果。 输入包含数组n和元素的大小

depth=0;
    for(int i=0;i<n-1;i++)
        {

            depth=depth+arr[i]+(1/arr[i+1]);
        }

4 个答案:

答案 0 :(得分:0)

尝试此操作,最简单的方法是递归-

static double calc_depth(int arr[], int i) {
    return arr[i] + (i<arr.length-1 ? + (1.0 / calc_depth(arr, i+1)) : 0.0);
}

public static void main(String args[]) {
    int[] a = {2, 1};
    System.out.println(calc_depth(a, 0));
}

答案 1 :(得分:0)

我现在没有C ++编辑器,但是想法是一样的: 您可以按照自己的方式进行操作,这是我的python代码:


#!/usr/bin/python
# -*- coding: utf-8 -*-


def cal(arr):
    depth, n = 0.0, len(arr)
    # go from n - 1 to 0
    for i in range(n - 1, -1, -1):  
        if depth == 0.0:
            depth = arr[i]
        else:
            depth = (arr[i] + 1.0 / depth)
    return depth


arr = [10, 20, 30]
print cal(arr)

正如我在评论中提到的,如果要迭代实现,则需要从n-1到0,而不是0到n-1,并且需要解决基本情况。 另外,可以以递归的方式将其作为第一个答案。

答案 2 :(得分:0)

似乎同时已删除了C ++,因此,如果您仍然想要c ++,这里几乎是一句话:

#include <vector>
#include <numeric>
double depth(const std::vector<double>& array){
    return std::accumulate(array.rbegin(),array.rend(),std::numeric_limits<double>::infinity(),[](double s, double a){
        return a + 1.0/s;
    });
}

#include <iostream>
int main(){
    std::vector<double> v{ 1.0,2.0,3.0, 4.0, 5.0, 6.0, 7.0, 8.0};

    std::cout<<depth(v);
}

但是由于浮点精度,您无法获得连续分数的非常精确的结果。

答案 3 :(得分:0)

您可以这样做:

double ans=0;
for(int i=n-1;i>1;i--){
    arr[i-1] = arr[i-1] + (double)(1/arr[i]);
    ans = arr[i-1];
}