嗨,我是递归的初学者。
问题:
一个孩子跑上楼梯,他可以一次跳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;
}
作为答案?
答案 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);
}
这会返回类似于没有参考参数的程序。