C中的递归bunnyears函数不起作用(无错误警告)[已关闭]

vuktfyat  于 2022-12-22  发布在  其他
关注(0)|答案(2)|浏览(119)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我被要求递归地编写一个bunnyears函数,而不使用循环和乘法,但不知何故,我无法让代码工作,我也尝试过使用来自Web的代码,但似乎还有其他我做错的地方。以下是代码:

#include <stdio.h>

int bunnyEars(int numBunnies){

    //int a = 2 * bunnyEars(bunnyEars(numBunnies-1));

    if(numBunnies%2 == 0){
        printf("%d", 3+bunnyEars(numBunnies-1));
        return 3+bunnyEars(numBunnies-1);}
    else if (numBunnies==0){
        return 0;
    }
    else{
        printf("%d", 2+bunnyEars(numBunnies-1));
        return 2+bunnyEars(numBunnies-1);
    }

return 0;
}

int main()
{
    bunnyEars(4);
    return 0;
}

挑战是这样的:我们有兔子站在一条线上,编号为1,2,......奇数的兔子有2只耳朵偶数的兔子有3只耳朵,写一个函数,得出一行中所有兔子耳朵的总和,没有循环和乘法
我期待着所有bunnyears的总和作为结果,但什么也没有得到,甚至没有一个错误的数字.而且我的返回函数是不工作在我的IDE idk为什么这就是为什么我也试图打印它,仍然没有

r55awzrz

r55awzrz1#

首先检查numBunies == 0,以下是正确的代码:

int bunnyEars(int numBunnies) {

//int a = 2 * bunnyEars(bunnyEars(numBunnies-1));

if (numBunnies == 0)
{
    return 0;
}
else if (numBunnies % 2 == 0) {
    printf("%d", 3 + bunnyEars(numBunnies - 1));
    return 3 + bunnyEars(numBunnies - 1);    
}
else {
    printf("%d", 2 + bunnyEars(numBunnies - 1));
    return 2 + bunnyEars(numBunnies - 1);
}

return 0;
}

int main()
{
    bunnyEars(4);
    return 0;
}
h7appiyu

h7appiyu2#

首先,进行一次小型代码评审:

#include <stdio.h>

int bunnyEars(int numBunnies){

    //int a = 2 * bunnyEars(bunnyEars(numBunnies-1));

    if(numBunnies%2 == 0){
        // NOTE: 0 % 2 = 0
        // Always check your base case(s) first
        printf("%d", 3+bunnyEars(numBunnies-1));
        return 3+bunnyEars(numBunnies-1);}
        // NOTE: Poor formatting. Wrong math per the requirements
        // you stated. 
    else if (numBunnies==0){
        return 0;
    }
    else{
        printf("%d", 2+bunnyEars(numBunnies-1));
        return 2+bunnyEars(numBunnies-1);
    }

return 0;
}

int main()
{
    bunnyEars(4);  // This is where you should be printing the result
    return 0;
}

你需要把你的基本情况放在第一位。你的代码遇到了堆栈溢出,因为你的第一个条件对0为真,这意味着你永远不会停止递归。
你还需要对偶数的兔子做正确的计算。你说要求是K % 3,其中K是兔子在行中的位置。你的代码只是加3。例如:兔子#2应该有两只耳朵,兔子#4应该有一只耳朵,兔子#6应该没有耳朵。

#include <stdio.h>

int bunnyEars(int numBunnies) {
  if (numBunnies == 0) {
    return 0;
  }

  if (numBunnies & 1) {
    return 2 + bunnyEars(numBunnies - 1);
  } else {
    return (numBunnies % 3) + bunnyEars(numBunnies - 1);
  }
}

int main() {
  printf("%d\n", bunnyEars(4));
  return 0;
}

输出:

7

相关问题