小白求問簡單問題,大変ですね
#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
這是為什么呢???
2023-08-23
// 你的第一個代碼,個人覺得應該為:
#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,正確)
2023-08-23
// 我的代碼是這樣的
//練習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;
}