楼梯小孩总是得0?

时间:2017-10-10 05:33:41

标签: c++ recursion

嗨,我是递归的初学者。

问题:
一个孩子跑上楼梯,他可以一次跳1步,2步或3步,我需要找到并返回他爬上某个楼梯号码的方式?

我的方法:
我试图将问题分成较小的基本情况,并在达到正确的ans时加1。

我的代码:

declare @t table(Index1 int,dateOfInquiry  datetime) 
insert into @t VALUES
 (649454,'2016-02-01')  --<- count
,(649455,'2016-02-12')  ---ignore (<l4 past 649454)
,(649456,'2016-02-12')  ---ignore (<l4 past 649454)
,(649457,'2016-02-17')  --<- count
,(649458,'2016-02-22')  ---ignore (<l4 past 649457)
,(649459,'2016-03-02')  ---count 
,(649459,'2016-03-15')  ---ignore (<l4 past 649457)

;WITH CTE
AS (
    SELECT min(dateOfInquiry) dateOfInquiry
        ,cast(0 AS BIGINT) r
    FROM @t

    UNION ALL

    SELECT *
    FROM (
        SELECT t.dateOfInquiry
            ,ROW_NUMBER() OVER (
                ORDER BY t.dateOfInquiry
                ) rn1
        FROM @t t
        INNER JOIN (
            SELECT dateOfInquiry
            FROM (
                SELECT dateOfInquiry
                    ,row_number() OVER (
                        ORDER BY dateOfInquiry DESC
                        ) rn
                FROM cte c1
                ) c2
            WHERE rn = 1
            ) c1 ON datediff(day, c1.dateOfInquiry, t.dateOfInquiry) >= 14
        ) t4
    WHERE rn1 = 1
    )
SELECT *
FROM cte

问题:
我似乎只得void helper(int n ,int& a){ if(n==0){ a = a+1; return; } if(n<0) return; helper(n-1,a); helper(n-2,a); helper(n-3,a); } int staircase(int n){ int ans = 0; helper(n,ans); return ans; } 作为答案?

1 个答案:

答案 0 :(得分:0)

我不明白为什么你的代码不会起作用。以下是一个使用某些更改的演示:Live Demo

建议您不要传入引用,而是将每个子问题作为步骤1,2或3的自包含问题,在这些问题中您将结果组合在一起,这是最终答案,类似于:

int staircase_without_reference(int n)
{
    if(n == 0) return 1;
    if(n < 0) return 0;

    return staircase(n - 1) + staircase(n - 2) + staircase(n - 3);   
}

这会返回类似于没有参考参数的程序。