这是我的家庭作业问题。
考虑这个java伪代码
string rep (int n){ ---> n is a natural number in this case.
if(n==0)
return "0";
if(n==1)
return "1";
string w = rep(n/2);
if(n%2==0)
return append (w,'0');
else
return append (w,'1');
}
如果我在参数(十进制)637上调用此方法,递归调用的前两个(十进制)-digit参数是什么?
我对这个实例中的参数含义感到困惑。似乎我可以将637除以8得到79.这是正确的吗?
答案 0 :(得分:2)
在您的情况下,参数是n
。
通常,方法调用的参数(或者参数列表)是你在括号(here)
之间放置的东西:
myMethod(a, b, c);
在此示例中,a
,b
和c
是参数。通常人们也将它们称为参数。在这种背景下,情况也是如此。
现在你的问题继续是递归调用的前两个参数。为此,行string w = rep(n/2);
中的行为不是递归调用。因此,第一个递归调用将具有参数n / 2,它是637/2 = 318的向下舍入部分。反过来,下一个递归调用将是318/2 = 159。
答案 1 :(得分:1)
参数是传递给函数的参数
在您的情况下,函数为rep
,参数为n
答案 2 :(得分:0)
第一个参数是637. n=637
。它不等于0.它不等于1. w=rep(n/2) => w=rep(637/2) => w=rep(318.5)
。那将是第一个递归调用,它的参数将是318.5,所以答案是31