写递归函数,在C中打印1和n个零

时间:2012-07-30 13:53:37

标签: c function recursion

我在C:

中编写递归函数时遇到问题
void func(int n)

对于给定数量的n打印" 1"并且 n 在它之后归零。

例如:

func(3);

打印:1000

func(5);

打印:100000

不允许使用全局变量(函数外部),并且不得增加参数计数。不允许其他辅助功能。

5 个答案:

答案 0 :(得分:0)

只是一些指示:

  1. 为什么你认为只有在第一次调用函数时才打印“1”?
  2. 为什么不能在最后一次调用递归函数时打印它然后打印所有0?
  3. 您如何确定对函数的调用是否是递归方式的最后一次调用? (“n”的值可以得到答案吗?)

答案 1 :(得分:0)

我建议你研究一下静态变量。你可以设置一个静态变量来判断你的函数是否被递归调用。如果你不允许使用全局变量,那只是一个棘手的解决方法。当您的递归完成后,只需将其设置为下一次调用即可。

答案 2 :(得分:0)

您可以使用两个功能解决此问题,例如funcfunc_recfunc会打印1,它会调用递归函数func_rec,它只会打印零(递归)。

答案 3 :(得分:-1)

#include <stdio.h>

void func(int k){
  if(k==0){
    printf("1");
    return;
  }
  func(k-1);
  printf("0");
}

int main(){
  func(3);
  return 0;
}

答案 4 :(得分:-1)

#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;
}

代码非常简单,所以即使看起来它是一个功课,我也会给出代码。

您之前提出的问题表明,您不是很喜欢编码。我想要做的是通过发布代码来减少你的挫败感,但有一点麻烦。

请回答我们为什么我给出的代码不是“纯粹”的功能?为什么这个解决方案应该放弃具有全局存储的解决方案。

你应该学习这些东西,非常有趣:)