#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
这是为什么呢?😭
// 你的第一个代码,个人觉得应该为:
#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,正确)
// 我的代码是这样的
//练习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;
}