C 编写递归函数
我在编写递归函数时遇到了麻烦 三角形数字如下: 1=1 3=1+2 6=1+2+3 10=1+2+3+4 15=1+2+3+4+5 21=1+2+3+4+5+6 等等 该系列以1(第一个三角形数字)开始。要计算第n个三角形数,n为 添加到上一个三角形数字。例如,计算第四个三角形数 在第三个三角形数(即6)上加4,即10=(1+2+3)+4 到目前为止,我的想法是:C 编写递归函数,c,algorithm,recursion,C,Algorithm,Recursion,我在编写递归函数时遇到了麻烦 三角形数字如下: 1=1 3=1+2 6=1+2+3 10=1+2+3+4 15=1+2+3+4+5 21=1+2+3+4+5+6 等等 该系列以1(第一个三角形数字)开始。要计算第n个三角形数,n为 添加到上一个三角形数字。例如,计算第四个三角形数 在第三个三角形数(即6)上加4,即10=(1+2+3)+4 到目前为止,我的想法是: int triNum(n) { if (n<=1) return n; int num =
int triNum(n)
{
if (n<=1)
return n;
int num = 0;
for (int i = 0; i < n; i++)
{
num = n + triNum(n-1)
}
return num;
}
int三分式(n)
{
如果(n用于递归调用,则需要知道从n-1到n的公式。在您的情况下,f(n)=n+f(n-1)
这里将生成所需的输出:
int tri(int n) {
if (n < 1) return 1;
return (n+1) + tri(n-1);
}
inttri(intn){
如果(n<1)返回1;
返回(n+1)+tri(n-1);
}
您可以这样测试它:
int main(void){
for (int i=0; i<10; i++) {
printf("%d: %d\n",i,tri(i));
}
return 0;
}
int main(无效){
对于(int i=0;i
让函数f(n)
表示第n
-个三角数。因此,现在我们需要找到一种方法,将函数的这个状态与前面的状态关联起来,其中状态由函数f
的参数表示。我们注意到,如果我们知道(n-1)
-th三角数,我们可以用公式f(n)=n+f(n-1)
找到n
-th。通过这个公式,我们递归地说明了函数f,也就是说,我们使用函数的先前状态来计算函数的状态(在这种情况下,它只有一个先前状态,f(n-1)
)。实现非常简单。如果您仍然不理解实现,请尝试用图形绘制递归,您将看到它的正确性。您并不真正需要循环。它不是迭代过程,而是递归实现。答案在于您的文本:
例如,第四个三角形数是通过在第三个三角形数上加4来计算的
一般来说,第n(4)个三角形是通过在n-1(3)的三角形上加上n(4)来计算的
int三分式(n)
{
如果(n)你测试过你的代码吗?它对你的测试用例有效吗?我会看看for循环中发生了什么。旁白:第n个三角形数字可以直接计算:n*(n+1)/2
发布的代码没有执行所需的功能。建议替换for()
return=n+triNum(n-1)
@sidyll为什么?定义应该是n+tri(n-1),除非你想让它被关1。你忽略了第0个三角形数字,也就是0。Idk在他的定义中,第一个三角形数字是1,所以我用它开始序列(从0开始)。我的代码生成正确的结果,但如果您认为此答案错误,则可以提交不同的答案。
int triangular(int n) {
if (n == 1)
return 1;
return n + triangular(n-1)
}
int triNum(n)
{
if (n<=1)
return n;
int num = 0;
num = n + triNum(n-1)
return num;
}
unsigned int
triNum(unsigned int n)
{
if (n <= 1) return n;
return n + triNum(n-1);
}