我正在撰寫一個用于查找階乘的遞回程式,一旦 x 達到零,為什么操作會在被呼叫函式中停止,而不是繼續到負值,例如去 -1、-2、-3 等等,因為 int 也采用負值和繼續操作,因為它是我自己的用戶定義功能。
#include<stdio.h>
int factorial( int x);
int main() {
int n;
scanf("%d",&n);
n=factorial(n);
printf("%d",n);
return 0;
}
int factorial(int x){
int f;
if(x==0||x==1){
return 1;
}
else{
f= x*factorial(x-1);
return f;}
}
uj5u.com熱心網友回復:
當factorial使用引數值 2 呼叫時,它會x==0||x==1在if陳述句中求值。此條件為假,因此if不執行 中的“then”子句,程式控制流向else.
else執行f = x*factorial(x-1),其中是x2 和factorial(x-1)是factorial(1)。
factorial因此,我們有一個引數值為 1的遞回呼叫。它x==0||x==1在if陳述句中求值。該條件為真,因此執行“then”子句。
“then”子句是return 1;,所以函式回傳 1,程式控制權回傳給呼叫者。
在呼叫者中,我們仍在評估x*factorial(x-1). factorial(x-1)已回傳 1,所以我們有2*1. 所以f設定為2。
下一條陳述句是return f;。所以 2 回傳給呼叫者,程式控制權回傳給呼叫者,也就是main. 程式繼續執行main。
該程式不會繼續到負值,因為沒有呼叫factorial負值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441812.html
