鱼C论坛

 找回密码
 立即注册
查看: 906|回复: 3

[已解决]递归

[复制链接]
发表于 2023-4-1 22:34:11 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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次,我这个代码没有输出结果求大佬帮忙看看。
最佳答案
2023-4-1 22:39:52
在你的递归函数中,你需要检查y的值,而不是x。请参考以下修改后的代码:

  1. #include <stdio.h>

  2. int fun(int x, int y) {
  3.     if (y == 0) {                                  // 修改了这里
  4.         return 1;
  5.     } else {
  6.         return x * fun(x, y - 1);
  7.     }
  8. }

  9. int main() {
  10.     int x, n;
  11.     scanf("%d%d", &x, &n);
  12.     printf("%d\n", fun(x, n));
  13.     return 0;
  14. }
复制代码


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

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

评分

参与人数 2荣誉 +1 鱼币 +2 贡献 -2 收起 理由
zhangjinxuan + 2
sfqxx + 1 -2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-1 22:35:47 | 显示全部楼层
本帖最后由 sfqxx 于 2023-4-1 22:36 编辑

你的代码没有问题,但是在调用 `fun()` 函数时,第二个参数 `y` 的值一直减一,最终递归到 `y = 0` 的时候就没有返回值了,所以没有输出结果。你可以在第一个递归条件中添加 `y > 0` 的判断,来避免这种情况的出现,代码如下:
  1. def fun(x, y):
  2.     if x == 1 or y == 0:  # 添加 y > 0 的判断
  3.         return x
  4.     else:
  5.         return x * fun(x, y - 1)
  6. x = int(input("请输入底数 x:"))
  7. n = int(input("请输入指数 n:"))
  8. result = fun(x, n)
  9. print(f"{x} 的 {n} 次方为:{result}")
复制代码

你可以将其转化为 C 语言代码,如下:
  1. #include <stdio.h>
  2. int fun(int x, int y) {
  3.     if (x == 1 || y == 0) {
  4.         return x;
  5.     } else {
  6.         return x * fun(x, y - 1);
  7.     }
  8. }
  9. int main() {
  10.     int x, n;
  11.     scanf("%!d(MISSING)%!d(MISSING)", &x, &n);
  12.     int result = fun(x, n);
  13.     printf("%!d(MISSING) 的 %!d(MISSING) 次方为:%!d(MISSING)", x, n, result);
  14.     return 0;
  15. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 22:39:52 | 显示全部楼层    本楼为最佳答案   
在你的递归函数中,你需要检查y的值,而不是x。请参考以下修改后的代码:

  1. #include <stdio.h>

  2. int fun(int x, int y) {
  3.     if (y == 0) {                                  // 修改了这里
  4.         return 1;
  5.     } else {
  6.         return x * fun(x, y - 1);
  7.     }
  8. }

  9. int main() {
  10.     int x, n;
  11.     scanf("%d%d", &x, &n);
  12.     printf("%d\n", fun(x, n));
  13.     return 0;
  14. }
复制代码


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

递归函数现在检查 y 是否等于 0,当 y 等于 0 时返回 1(因为任何数的 0 次幂都是 1)。当 y 不等于 0 时,函数将 x 乘以 fun(x, y-1) 的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 12:35:53 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表