1203081549 发表于 2023-4-1 22:34:11

递归

int fun(int x,int y)
          {
            if(x==1)
            return x;
            else
            return x*fun(x,y-1);
          }
          void main()
          {
            int x,n;
            scanf("%d%d",&x,&n);
            printf("%d",fun(x,n));
          }
用递归实现x的n次,我这个代码没有输出结果求大佬帮忙看看。

sfqxx 发表于 2023-4-1 22:35:47

本帖最后由 sfqxx 于 2023-4-1 22:36 编辑

你的代码没有问题,但是在调用 `fun()` 函数时,第二个参数 `y` 的值一直减一,最终递归到 `y = 0` 的时候就没有返回值了,所以没有输出结果。你可以在第一个递归条件中添加 `y > 0` 的判断,来避免这种情况的出现,代码如下:
def fun(x, y):
    if x == 1 or y == 0:# 添加 y > 0 的判断
      return x
    else:
      return x * fun(x, y - 1)
x = int(input("请输入底数 x:"))
n = int(input("请输入指数 n:"))
result = fun(x, n)
print(f"{x} 的 {n} 次方为:{result}")
你可以将其转化为 C 语言代码,如下:
#include <stdio.h>
int fun(int x, int y) {
    if (x == 1 || y == 0) {
      return x;
    } else {
      return x * fun(x, y - 1);
    }
}
int main() {
    int x, n;
    scanf("%!d(MISSING)%!d(MISSING)", &x, &n);
    int result = fun(x, n);
    printf("%!d(MISSING) 的 %!d(MISSING) 次方为:%!d(MISSING)", x, n, result);
    return 0;
}

isdkz 发表于 2023-4-1 22:39:52

在你的递归函数中,你需要检查y的值,而不是x。请参考以下修改后的代码:

#include <stdio.h>

int fun(int x, int y) {
    if (y == 0) {                                  // 修改了这里
      return 1;
    } else {
      return x * fun(x, y - 1);
    }
}

int main() {
    int x, n;
    scanf("%d%d", &x, &n);
    printf("%d\n", fun(x, n));
    return 0;
}

这个修改后的代码将实现你想要的功能:计算 x 的 n 次幂。

递归函数现在检查 y 是否等于 0,当 y 等于 0 时返回 1(因为任何数的 0 次幂都是 1)。当 y 不等于 0 时,函数将 x 乘以 fun(x, y-1) 的结果。

myd0311 发表于 2023-4-2 12:35:53

学习
页: [1]
查看完整版本: 递归