小白求问简单问题,大変ですね

来源:7-6 强者争霸

秋风起琴瑟里

2023-07-03 13:05

#include<stdio.h>
#include<iostream>
using namespace std;
void exchange(int* a,int* b)
{
    int temp =*b;
    *b=*a;
    *a=temp;
}
int multi(int n)
{
    int num;
    if(n==1)
    {
        return 1;
    }
    num=n*multi(n-1);
    printf("打印出来为%d\n",num);
}
int main(int argc,char**argv)
{
    int a=9;
    int b=99;
    exchange(&a,&b);
    printf("a:%d,b:%d\n",a,b);
    multi(5);
    return 0;
}

这样运行为

a:99,b:9

打印出来为2

打印出来为36

打印出来为52

打印出来为65


而这样

#include<stdio.h>
#include<iostream>
using namespace std;
void exchange(int* a,int* b)
{
    int temp =*b;
    *b=*a;
    *a=temp;
}
int multi(int n)
{
    int num;
    if(n==1)
    {
        return 1;
    }
    num=n*multi(n-1);
}
int main(int argc,char**argv)
{
    int a=9;
    int b=99;
    exchange(&a,&b);
    printf("a:%d,b:%d",a,b);
    cout<<endl<<multi(5);
    return 0;
}

运行为

a:99,b:9

120


这是为什么呢?😭

写回答 关注

2回答

  • String桃花仙人
    2023-08-23 17:04:15

    // 你的第一个代码,个人觉得应该为:


    #include<stdio.h>

    #include<iostream>

    using namespace std;

    void exchange(int* a, int* b)

    {

        int temp = *b;

        *b = *a;

        *a = temp;

    }

    int multi(int n)

    {

        int num;

        if (n == 1)

        {

            return 1;

        }

        else {

            num = n * multi(n - 1);  // 应该把代码放在else里面,因为逻辑为“非黑即白”

            return num; // 需要给返回值接收进行 阶乘

        }

        printf("打印出来为%d\n", num); // 函数的结束关键字"return",所以不会执行该语句了

    }

    int main(int argc, char** argv)

    {

        int a = 9;

        int b = 99;

        exchange(&a, &b);

        printf("a:%d,b:%d\n", a, b);

        int m;

        m = multi(3); // 声明一个变量接收返回值

        std::cout << m; // 打印阶乘的结果,检验是否正确

        return 0;

    }


    //返回结果

    //a:99, b : 9

    //6 (输入3,得到结果6,正确)


  • String桃花仙人
    2023-08-23 16:53:32

    // 我的代码是这样的




    //练习2:利用递归来求一个数的阶乘

    int fun2(int n) {

    if (n == 1) {

    return n;

    }

    else {

    return n * fun2(n - 1);

    }

    }

    //练习1:使用函数来交换两个数的值

    int fun1(int* a, int* b) {

    int c = *a;

    *a = *b;

    *b = c;


    return 0;

    };


    #include<iostream>

    int main() {

    int a = 2;

    int b = 3;

    fun1(&a, &b);

    std::cout << a << std::endl; // 3

    std::cout << b << std::endl; // 2


    int n;

    std::cout << "请输入一个数,求阶乘:";

    std::cin >> n;

    n = fun2(n);

    std::cout << n; // 输入3赋值,得到6


    return 0;

    }



趣味 C++ 入门

C++ 入门,开启趣味学习之旅,揭开 C++ 的神秘面纱,让你不再望而生畏。

31577 学习 · 191 问题

查看课程

相似问题