I have a contract that gets deployed on Ropsten and then I'm trying to call function 'addRecipe' with the following code on geth:
recipes.addRecipe(300, "zupa", "zupa z trupa", {from:web3.eth.accounts[0], gas: 20000000})
The function looks as following:
function addRecipe(uint256 _price, string _name, string _content) public {
    recipes[recipeCount].price = _price;
    recipes[recipeCount].name = _name;
    recipes[recipeCount].content = _content;
    recipes[recipeCount].recipeOwner = msg.sender;
    recipeCount++;
}
I get the TX hash but looking up the transaction in Etherscan gives
 Warning! Error encountered during contract execution [Bad instruction] 
Adding 'payable' modifier to the function or using the following command doesn't give any better results...
recipes.addRecipe.sendTransaction(300, "zupa", "zupa z trupa", {from:web3.eth.accounts[0], gas: 200000000})
The whole contract:
pragma solidity ^0.4.24;
contract Recipes {
    address owner;
    uint256 recipeCount = 0;
    struct Recipe {
        string name;
        string content;
        uint256 price;
        address recipeOwner;
    }
    Recipe[] public recipes;
    function () public {
        owner = msg.sender;
    }
    function kill() public {
        require (msg.sender == owner);
        selfdestruct(owner);
    }
    function addRecipe(uint256 _price, string _name, string _content) public {
        recipes[recipeCount].price = _price;
        recipes[recipeCount].name = _name;
        recipes[recipeCount].content = _content;
        recipes[recipeCount].recipeOwner = msg.sender;
        recipeCount++;
    }
    function showRecipes(uint256 _id) constant returns(string) {
        return recipes[_id].content;
    }
}