Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 编写递归函数_C_Algorithm_Recursion - Fatal编程技术网

C 编写递归函数

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 =

我在编写递归函数时遇到了麻烦

三角形数字如下:

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 = 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);
}