楼梯孩子总是得到0

staircase child always getting a 0?

本文关键字:孩子      更新时间:2023-10-16

嗨,我是递归的初学者。

问题:
一个孩子正在爬楼梯,他一次可以跳 1、2 或 3 步,我需要找到并返回他可以爬上某个楼梯数的方法数量?

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

我的代码:

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答案?

我不

明白为什么你的代码不起作用。这是它进行一些更改的演示:现场演示

建议您不要传入参考,而是将步骤 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);   
}

这将返回类似于没有引用参数的程序。