我在递归方面非常糟糕,我正在努力学习它。我有这个功能
public static int ques07(int n) {
int sum = 1;
int k = 1;
while (sum <= n) {
sum = sum + k;
k++;
}
return sum;
}
我正在尝试编写这个函数的递归等价物,到目前为止我已经实现了这个
public static int ques7(int n) {
int sum = 1;
if(sum <= n)
return sum + ques7(n-1);
else
return sum;
}
但我怀疑这是不对的,任何帮助都会非常感激。
答案 0 :(得分:0)
试试这个:
public static int recSum(int n, int sum, int k) {
if ((sum+k)<=n){
return recSum(n,sum+k, k+1);
}else{
return (sum+k);
}
}
要检查功能是否相同,您可以写:
int main()
{
std::cout << "Original sum ";
std::cout << ques07(22)<<"\n";
std::cout << "Recursive sum ";
std::cout << recSum(22,1,1);
}
但请记住,递归更耗费内存。使用WHILE循环,仅限于INT变量。使用递归,您将受限于INT参数和堆栈内存(每次调用新函数时都会使用更多内存)。