如何使用C中的递归函数从1到N打印数字

时间:2018-03-09 12:57:46

标签: c

我正在使用一个函数在C.中打印从1到N的数字。但问题是,变量必须在内部定义,不应该使用循环。函数是通过名称调用的。简而言之,函数应该在每次调用时打印一个数字。我无法编写程序代码,因为变量是在函数内声明的。请告诉我这是可以的。

例如:要打印1到5之间的数字,但它只打印'1'5次。

#include <stdio.h>
void main()
{
repeat_function();
repeat_function();
repeat_function();
repeat_function();
repeat_function();
return 0;
}

void repeat_function()
{
int a=1;
printf (%d,a);
a = a + 1;
}

3 个答案:

答案 0 :(得分:2)

最简单的方法是将数字作为参数的函数。 如果参数大于1,则此函数使用parameter - 1调用自身。最后,它打印参数的值并返回。

修改 由于您不需要传递参数或使用静态变量,因此可以使用全局变量。

#include <stdio.h>

int value = 10;

void recursion() {
    if (value > 0) {
        int out = value;
        value--;
        recursion();
        printf("%d", out);
    }
    return;
}

int main()
{
    recursion();
    return 0;
}

这不是好的风格,但它可以满足您的要求。

<强> EDIT2

使用您的代码示例我使用全局变量来讨论此解决方案:

#include <stdio.h>

int value = 1; // <-- global variable

void main()
{
repeat_function();
repeat_function();
repeat_function();
repeat_function();
repeat_function();
return 0;
}

void repeat_function()
{
printf (%d,value);
value += 1;
}

答案 1 :(得分:1)

void printMe(int num) {
    if (num == N+1) { return; }
    printf("%d", num);
    printMe(num+1);
}

答案 2 :(得分:0)

你可以像这样使用静态变量:

static int i = 1;

静态变量仅声明一次。

您也可以声明全局变量全局变量只是在函数外声明的变量。这些函数可以在每个sub_scope中使用。

或者你可以这样做:

#include <stdio.h>

int ft_loop(int i, int limit) {
    printf("i = %d", i);
    if (i > limit)
        return 0;
    ft_loop(i++, limit);
}

int main()
{
    ft_loop(1, 30);

    return 0;
}