-2

我在 C 中编写递归函数时遇到问题:

void func(int n)

对于给定的数字 n 打印“1”并且在其后打印n 个零。

例如:

func(3);

打印:1000

func(5);

打印:100000

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

4

5 回答 5

0

只是一些指针:

  1. 为什么你认为你必须只在第一次调用函数时打印“1”?
  2. 为什么不能在最后一次调用递归函数时打印它,然后打印所有的 0?
  3. 您将如何确定对函数的调用是否是递归方式的最后一次调用?(“n”的值能保持答案吗?)
于 2012-07-30T14:01:40.813 回答
0

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

于 2012-07-30T14:07:18.563 回答
0

您可以使用两个函数解决此问题,例如funcfunc_recfunc将打印1并且它会调用递归函数,该函数func_rec将仅打印零(递归)。

于 2012-07-30T14:11:09.377 回答
-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;
}

代码非常琐碎,所以即使它看起来像是一个家庭作业,我也会给出代码。

您之前的问题表明您不太喜欢 c 编码。我正在尝试做的是通过提供代码来减少您的挫败感,但要有所改变。

请回答我们为什么我给出的代码不是“纯”函数?为什么这个解决方案应该与具有全局存储的解决方案一起丢弃。

你应该学习这些东西,它很有趣:)

于 2012-07-30T14:21:18.400 回答
-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;
}
于 2012-07-30T13:59:09.207 回答