用 C 寻找阶乘

问题描述

这里只是 C 语言的新手。我正在尝试使用递归和指针打印给定输入的阶乘,但是当我的输入为 5 时,输出为 2293620。有人可以帮助我吗?我不确定这个数字是从哪里来的,因为 5 的阶乘应该给我 120。谢谢你的帮助!

#include<stdio.h>


int countlength(int *num) {
    
    int x = 1;
    if (*num == 1) {
        return 1; 
    } else {
        return *num * countlength(num-1);
    }
}

int main() {

    int n,l;
    printf("Enter number: ");
    scanf("%d",&n);
    l = countlength(&n);
    printf("The factorial of %d is %d\n",n,l);
    return 0;
}

解决方法

从您的代码中删除引用。

#include<stdio.h>


int countlength(int num) {
    
    int x = 1;
    if (num == 1) {
        return 1; 
    } else {
        return num * countlength(num-1);
    }
}

int main() {

    int n,l;
    printf("Enter number: ");
    scanf("%d",&n);
    l = countlength(n);
    printf("The factorial of %d is %d\n",n,l);
    return 0;
}
,

在这种情况下,我认为您不需要使用按引用传递。您应该使用按值传递。那么您的代码将完美运行

,

更改这一行:

return num * countlength(num - 1);

为此:

int val = *num - 1;
return *num * countlength(&val);

因此您正确分配了值并将其作为指针传递。

,


int countlength(int *num) {
    
    int x = *num - 1;
    if (*num == 1) {
        return 1; 
    } else {
        return *num * countlength(&x);
    }
}

int main() {

    int n,&n);
    l = countlength(&n);
    printf("The factorial of %d is %d\n",l);
    return 0;
}```
**Try this**
,

int countlength(int *num) {

if (*num == 1) {
    return 1; 
} else {
    return *num * countlength(&(*num - 1));
}

}

int main() {

int n,l;
printf("Enter number: ");
scanf("%d",&n);
l = countlength(&n);
printf("The factorial of %d is %d\n",l);
return 0;

}

试试这个