我在 C 中编写递归函数时遇到问题:
void func(int n)
对于给定的数字 n 打印“1”并且在其后打印n 个零。
例如:
func(3);
打印:1000
func(5);
打印:100000
不允许使用全局变量(函数外部),并且不得增加参数计数。不允许使用其他辅助函数。
只是一些指针:
我建议您查看静态变量。您可以设置一个静态变量来判断您的函数是否被递归调用。如果您不允许使用全局变量,这只是一个棘手的解决方法。当你的递归完成后,只需将其设置为下一次调用。
您可以使用两个函数解决此问题,例如func
和func_rec
。func
将打印1
并且它会调用递归函数,该函数func_rec
将仅打印零(递归)。
#include <stdio.h>
void func(int n)
{
static one = 1;
if (one == 1){
printf("1");
one--;
func(n - 1);
}
else {
if (n < 0){
printf("\n");
return;
}
else {
printf("0");
func(n - 1);
}
}
}
int main() {
func(5);
return 0;
}
代码非常琐碎,所以即使它看起来像是一个家庭作业,我也会给出代码。
您之前的问题表明您不太喜欢 c 编码。我正在尝试做的是通过提供代码来减少您的挫败感,但要有所改变。
请回答我们为什么我给出的代码不是“纯”函数?为什么这个解决方案应该与具有全局存储的解决方案一起丢弃。
你应该学习这些东西,它很有趣:)
#include <stdio.h>
void func(int k){
if(k==0){
printf("1");
return;
}
func(k-1);
printf("0");
}
int main(){
func(3);
return 0;
}