Easy to Approach & understand C++- both recursion method as well as top-down dp solution
Approach 1(Recursion): \n\nclass Solution {\npublic:\n    //Recursion Approach - May be TLE, just written to get the top-down approach\n    //Recursion is easy 
Approach 1(Recursion): \n```\nclass Solution {\npublic:\n    //Recursion Approach - May be TLE, just written to get the top-down approach\n    //Recursion is easy to understand - once skip a number and once take it and multiply it\n    //Can be approached similar to coin change problem\n    int solve(int n, int i){\n        if(n == 0) return 1;\n        if(n < 0 || i <= 0) return 0;\n        int res = solve(n, i-1);               //once skip the number\n        res = max(res, i*solve(n-i, i));   //consider it and multiply\n        return res;\n    }\n    int integerBreak(int n) {\n       return solve(n, n-1);\n    }\n};\n```\n\nApproch 2( Top down dp):\n```\nclass Solution {\npublic:\n    //top-down approach\n    int integerBreak(int n) {\n        vector<vector<int>> dp(n+1, vector<int> (n+1, 1 ));\n        for(int i = 2; i <= n; ++i){\n            for(int j = 2; j <= n; ++j){\n                dp[i][j] = dp[i-1][j];\n                if(i-1 <= j){\n                    dp[i][j] = max(dp[i][j], (i-1)*dp[i][j -(i-1)]);\n                }\n            }\n        }\n        return dp[n][n];\n    }\n};\n```\nNote: Further this can be optimized to O(N) Space Complexity.
['Dynamic Programming', 'Recursion', 'C']