gpt4 book ai didi

c - 将函数参数阐述为静态变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:55 25 4
gpt4 key购买 nike

我想知道如何让函数将给定参数视为静态变量。例如,我尝试生成冰雹数字,但没有成功:

#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 进行操作,从而无休止地进行下去,永远不会到达案例库。

几个问题:

  1. 这个想法是否代表了解决问题的可行方法?
  2. 这个想法是否代表了解决问题的合理/有效方法?
  3. 在类似情况下,exit(0) 是否使用正确?

最佳答案

为此您不需要静态变量。只需传入新值即可对其进行操作和使用。此外,值 1 是您的基本情况,因此检查它以停止递归,并打印 n 的值,这样您就可以真正看到发生了什么。

void hailstone(int n){
printf("n=%d\n", n);
if(n % 2 == 0 && n > 1) {
hailstone(n/2);
} else if(n > 1) {
hailstone((n*3) + 1);
}
}

鉴于此函数可以进行多次迭代,递归解决方案最终可能会导致堆栈溢出。最好采用迭代解决方案:

void hailstone(int n){
while (n > 1) {
printf("n=%d\n", n);
if(n % 2 == 0) {
n = n/2;
} else {
n = (n*3) + 1;
}
}
}

关于c - 将函数参数阐述为静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46852907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com