我想知道如何讓一個函數考慮一個給定的參數作爲一個靜態變量。例如,我試過,沒有成功,生成hailstone號碼:精心設計一個函數參數作爲靜態變量
#include<stdio.h>
int hailstone(int);
int n; /* n is an extern variable*/
int main(){
hailstone(n);
return 0;
}
int hailstone(int n){
static int m = n; /*not possible because n is not constant*/
if(m % 2 == 0 && m != 1)
hailstone(m /= 2);
else if(m != 1)
hailstone((m *= 3) + 1);
else
exit(0); /*Is the use of exit() correct, in this case?*/
return 0;
}
我想用一個靜態變量來詳細說明n。否則,每個遞歸調用將在整個參數n
上運行,因此會持續不斷,從未達到案例庫。
幾個問題:
- 這是否代表想法可行的問題解決辦法?
- 這個想法是否代表合理/有效的方法來解決問題?
- 是否
exit(0)
使用正確,類似的情況?
'靜態INT米;然而,m = n;'是可能的。 – Bathsheba
在遞歸函數中使用全局變量會挫敗遞歸的重點,所以您肯定需要重新考慮您的解決方案。在任何情況下,你的函數都不會顯示任何基本情況(除0以外,無法達到)。在你看來,基本情況是什麼?爲什麼你認爲遞歸不能達到它? – rici
@ricie,是不是'm <1'表示的案例庫?也許,因爲最終的結果應該是1,'m == 1'可能是更好的基本情況,你是對的。另外,我正在徘徊在如何超越全球變量的問題上。 – Worice