递归实现

时间:2012-09-08 19:01:38

标签: recursion

递归方法,找出整数k可以表示为sum的不同方式的数量,其中每个操作数是一个小于n的整数...请帮我解决这个问题。我无法想到这个问题的递归解决方案

1 个答案:

答案 0 :(得分:1)

基本上,我的第一个想法是:

int numberOfWays(int x)
{
    if(x <= 1)
        return 0;
    if(x == 2)
        return 1;
    // else:
    int res = 0;
    int i;
    for(i = 1; i <= x / 2; i++)
        res += numberOfWays(x - i);
    return res;
}

我会给它做几个测试和想法,但那就是它。

也许只有几句解释......

显然,没有办法将1写为整数之和&lt;并且只有一种方法是将2写为整数之和&lt; 1。 2:2 = 1 + 1。

从那以后,事情变得有趣。每个整数x> 2可以写成(x-1)+ 1.因为我们正在递归,我们现在得到方式的数量,(x-1)可以写成整数之和&lt; (x-1)等。最终,我们将达到(x-n)= 2,这将返回1.

从那时起,我们向上回去,总结我们找到代表数字的方式的数量,并且瞧瞧:)