Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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中使用递归函数打印从1到N的数字_C - Fatal编程技术网

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

如何在C中使用递归函数打印从1到N的数字,c,C,我正在使用一个函数来打印C中从1到N的数字。但问题是,变量必须在内部定义,不应该使用循环。函数是按名称调用的。简言之,每次调用函数时都应该打印一个数字。我无法编写程序,因为变量是在函数中声明的。请告诉我有没有可能这样做 例如:打印从1到5的数字。但它只打印了“1”5次 #include <stdio.h> void main() { repeat_function(); repeat_function(); repeat_function(); repeat_function();

我正在使用一个函数来打印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;
}
#包括
void main()
{
重复_函数();
重复_函数();
重复_函数();
重复_函数();
重复_函数();
返回0;
}
void repeat_函数()
{
INTA=1;
printf(%d,a);
a=a+1;
}

您可以使用如下静态变量:

static int i = 1;
静态变量只声明一次

您也可以声明全局变量全局变量只是在函数外部声明的变量。这些功能可用于每个子范围

或者你也可以这样做:

#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;
}
#包括
int-ft\u循环(int-i,int-limit){
printf(“i=%d”,i);
如果(i>限制)
返回0;
ft_循环(i++,极限);
}
int main()
{
ft_环(1,30);
返回0;
}

您可以使用如下静态变量:

static int i = 1;
静态变量只声明一次

您也可以声明全局变量全局变量只是在函数外部声明的变量。这些功能可用于每个子范围

或者你也可以这样做:

#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;
}
#包括
int-ft\u循环(int-i,int-limit){
printf(“i=%d”,i);
如果(i>限制)
返回0;
ft_循环(i++,极限);
}
int main()
{
ft_环(1,30);
返回0;
}

最简单的方法是将数字作为参数的函数。 如果参数大于1,则此函数使用参数-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;
}
#包括
int值=10;
void递归(){
如果(值>0){
int out=值;
价值--;
递归();
printf(“%d”,out);
}
返回;
}
int main()
{
递归();
返回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;
}
#包括

int值=1;// 最简单的方法是将数字作为参数的函数。 如果参数大于1,则此函数使用参数-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;
}
#包括
int值=10;
void递归(){
如果(值>0){
int out=值;
价值--;
递归();
printf(“%d”,out);
}
返回;
}
int main()
{
递归();
返回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;
}
#包括


int值=1;//内部定义的含义是什么?通过引用传递变量。所以变量的作用域在另一个函数中。@ClamentJohn在C中没有传递引用。@ClamentJohn“Write scalable code.Period.”绝对错误。你读过答案@ClamentJohn了吗?传递4或8个字节不会产生很大的差异。除此之外,在64位机器上传递一个int复制4个字节,而传递一个指针将复制8个字节,因此在这种特殊情况下传递int wll甚至会稍微快一点。内部定义的含义是什么?通过引用传递变量。所以变量的作用域在另一个函数中。@ClamentJohn在C中没有传递引用。@ClamentJohn“Write scalable code.Period.”绝对错误。你读过答案@ClamentJohn了吗?传递4或8个字节不会产生很大的差异。最重要的是,在64位机器上传递一个int会复制4个字节,而传递一个指针会复制8个字节,因此在这种特殊情况下传递int wll甚至会稍微快一点,这将打印从N到1的数字,而不是从1到N的数字;)这将增加堆栈大小。在每次函数调用中都要声明num。记住它是递归调用的。更改
printf
调用和
printMe
调用的顺序,以获得正确的输出顺序。@ClamentJohn任何递归范例都会分解堆栈。谢谢,但我无法将任何值传递给函数…甚至(int num)都不能。这将打印从N到1的数字,而不是从1到N的数字;)这将增加堆栈大小。在每次函数调用中都要声明num。记住它是递归调用的。更改
printf
调用和
printMe
调用的顺序,以获得正确的输出顺序。@ClamentJohn任何递归范例都会分解堆栈。谢谢,但我不能将任何值传递给函数…甚至不能(int num)。这会增加堆栈大小。在每次函数调用中都要声明num。记住它是被递归调用的。你是什么意思?每次调用
ft\u loop
时,你都在新范围内声明两个新的
int
。这意味着程序需要更多内存。你的这段代码可以用,但你的思维方式不像一个C程序员,内存就是一切。但是你错了。我并没有声明两个新的int。我只是每次查看相同的内存区域。这将增加堆栈大小。你在每个函数中都声明num