【问题标题】:Write recursive function that prints 1 and n zeroes in C [closed]编写在C中打印1和n个零的递归函数[关闭]
【发布时间】:2012-07-30 13:53:36
【问题描述】:

我在用 C 语言编写 递归 函数时遇到问题:

void func(int n)

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

例如:

func(3);

打印:1000

func(5);

打印:100000

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

【问题讨论】:

  • 这是作业吗?你试过什么?
  • 这是homework吗?
  • @EricFinn 我不知道如何检测到这是第一次调用该函数来打印“1”。打印零不是问题。
  • 如果你知道答案,请发帖
  • @GladToHelp 你没有回答我的问题。

标签: c function recursion


【解决方案1】:

只是一些提示:

  1. 为什么您认为必须仅在第一次调用该函数时才打印“1”?
  2. 为什么不能在最后一次调用递归函数时打印出来,然后打印所有的 0?
  3. 如何确定对函数的调用是否是递归方式的最后一次调用? (“n”的值能保持答案吗?)

【讨论】:

  • 1.好吧,我看到了答案,我想我有一个坏主意 2. 与 1 相同。 3. 在某些情况下,“n”(参数)可以保留答案。例如,如果我需要 000001 而不是 100000,我可以通过检查 n == 0 来检测它是否是最后一次调用
  • @GladToHelp,在这种情况下 if (n == 0) 也可以提供帮助,如果您有效地利用递归先打印 1 然后打印 0。 :)
  • 同意。我已经看到了解决方案(正确答案)。
【解决方案2】:

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

【讨论】:

  • 抱歉,这是个糟糕的建议。
  • 它会起作用,但这是非常不寻常的方法。
【解决方案3】:

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

【讨论】:

  • 重点是只使用一个只有一个参数的函数
  • @GladToHelp 问题中没有指定限制。
【解决方案4】:
#include <stdio.h>

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

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

【讨论】:

  • 这样给出家庭作业答案会剥夺提问者学习的机会。
  • 这甚至不起作用..它会打印最后一个
  • @JohnCorbett 逐行追踪。
  • 对,我没想到:P 傻我,递归会阻止 0 被打印到最后
  • 这段代码错过了教授为他的学生准备的技巧。
【解决方案5】:
#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 编码。我正在尝试做的是通过提供代码来减少你的挫败感,但要有所改变。

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

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

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2018-08-18
    • 2015-05-07
    • 1970-01-01
    • 2012-10-28
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多