# Value of continuous floor function : F(x) = F(floor(x/2)) + x

Given an array of positive integers. For every element x of array, we need to find the value of continuous floor function defined as F(x) = F(floor(x/2)) + x, where F(0) = 0.

Examples :-

```Input : arr[] = {6, 8}
Output : 10 15

Explanation : F(6) = 6 + F(3)
= 6 + 3 + F(1)
= 6 + 3 + 1 + F(0)
= 10
Similarly F(8) = 15
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Basic Approach : For given value of x, we can calculate F(x) by using simple recursive function as:

```int func(int x)
{
if (x == 0)
return 0;
return (x + func(floor(x/2)));
}
```

In this approach if we have n queries then it will take O(x) for every query element

An Efficient Approach is to use memoization We construct an array which holds the value of F(x) for each possible value of x. We compute the value if not already computed. Else we return the value.

## C++

 `// C++ program for finding value  ` `// of continuous floor function ` `#include ` ` `  `#define max 10000 ` `using` `namespace` `std; ` ` `  `int` `dp[max]; ` ` `  `void` `initDP() ` `    ``{ ` `         ``for` `(``int` `i = 0; i < max; i++) ` `             ``dp[i] = -1; ` `    ``} ` ` `  `// function to return value of F(n) ` `int` `func(``int` `x) ` `    ``{ ` `        ``if` `(x == 0) ` `            ``return` `0; ` `        ``if` `(dp[x] == -1) ` `            ``dp[x] = x + func(x / 2); ` ` `  `        ``return` `dp[x]; ` `    ``} ` ` `  `void` `printFloor(``int` `arr[], ``int` `n) ` `    ``{ ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``cout << func(arr[i]) << ``" "``; ` `    ``} ` ` `  `// Driver code ` `int` `main() ` `    ``{ ` `        ``// call the initDP() to fill DP array ` `        ``initDP(); ` ` `  `        ``int` `arr[] = { 8, 6 }; ` `        ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]); ` ` `  `        ``printFloor(arr, n); ` ` `  `        ``return` `0; ` `    ``} `

## Java

 `// Java program for finding value ` `// of continuous floor function ` `class` `GFG  ` `{ ` `    ``static` `final` `int` `max = ``10000``; ` `    ``static` `int` `dp[] = ``new` `int``[max]; ` `     `  `    ``static` `void` `initDP()  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < max; i++) ` `            ``dp[i] = -``1``; ` `    ``} ` `     `  `    ``// function to return value of F(n) ` `    ``static` `int` `func(``int` `x)  ` `    ``{ ` `        ``if` `(x == ``0``) ` `            ``return` `0``; ` `        ``if` `(dp[x] == -``1``) ` `            ``dp[x] = x + func(x / ``2``); ` `     `  `        ``return` `dp[x]; ` `    ``} ` `     `  `    ``static` `void` `printFloor(``int` `arr[], ``int` `n)  ` `    ``{ ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `            ``System.out.print(func(arr[i]) + ``" "``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `         `  `        ``// call the initDP() to fill DP array ` `        ``initDP(); ` `     `  `        ``int` `arr[] = {``8``, ``6``}; ` `        ``int` `n = arr.length; ` `     `  `        ``printFloor(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 program for finding value  ` `# of continuous floor function  ` ` `  `max` `=` `10000` ` `  `dp ``=` `[``0``] ``*` `max` ` `  `# function to initialize the DP array ` `def` `initDP() : ` `     `  `        ``for` `i ``in` `range``(``max``) :  ` `                ``dp[i] ``=` `-``1` `     `  `# function to return value of F(n)  ` `def` `func(x) : ` ` `  `    ``if` `(x ``=``=` `0``) : ` `        ``return` `0` `         `  `    ``if` `(dp[x] ``=``=` `-``1``) : ` `        ``dp[x] ``=` `x ``+` `func(x ``/``/` `2``) ` ` `  `    ``return` `dp[x]  ` `     `  `def` `printFloor(arr, n) : ` `     `  `    ``for` `i ``in` `range``(n) : ` `                 `  `        ``print``(func(arr[i]), end ``=` `" "``) ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `        ``# call the initDP() to  ` `        ``# fill DP array          ` `        ``initDP() ` ` `  `        ``arr ``=` `[``8``, ``6``] ` `        ``n ``=` `len``(arr) ` ` `  `        ``printFloor(arr, n) ` ` `  `# This code is contributed by Ryuga `

## C#

 `// C# program for finding value  ` `// of continuous floor function ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `    ``static` `int` `max = 10000; ` `    ``static` `int` `[]dp = ``new` `int``[max]; ` `     `  `    ``static` `void` `initDP()  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < max; i++) ` `            ``dp[i] = -1; ` `    ``} ` `     `  `    ``// function to return value of F(n) ` `    ``static` `int` `func(``int` `x)  ` `    ``{ ` `        ``if` `(x == 0) ` `            ``return` `0; ` `        ``if` `(dp[x] == -1) ` `            ``dp[x] = x + func(x / 2); ` `     `  `        ``return` `dp[x]; ` `    ``} ` `     `  `    ``static` `void` `printFloor(``int` `[]arr, ``int` `n)  ` `    ``{ ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``Console.Write(func(arr[i]) + ``" "``); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `         `  `        ``// call the initDP() to fill DP array ` `        ``initDP(); ` `     `  `        ``int` `[]arr = {8, 6}; ` `        ``int` `n = arr.Length; ` `     `  `        ``printFloor(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal `

## PHP

 ` `

Output:

```15 10
```