橙猫猫缺大德 2023-03-05 01:48 采纳率: 50%
浏览 16
已结题

关于字符串递归算法的一些疑惑

这些是我在训练递归时遇到的一些疑惑,我现在图片展示的这个算法是正确的,但是当输入的k过大时就会导致内存爆掉,我正在想办法用动态数组解决,想了一天一夜多实在不会了。
除此之外还有几个问题,希望可以得到解答
问题1:如何用动态数组来完善我这个算法思路。
问题2:char *s1="hello"这样定义出来的字符串不能修改,所以我只好把一开始的字符串定义成 char s1[]="a";这样却导致我后来发现内存不够用后不会把malloc这个东西套进来,不会初始化字符串以及修改字符串了,我对malloc这个东西的用法不太熟悉,感觉使用指针来用malloc和修改字符串这两个事件从性质上冲突了,请解惑
问题3:递归的本质就是重复调用一个函数,为了达成重复调用的效果,我只能把指针设置在function2里面,因为如果设置在主函数里好像无法递归,只能主函数里是字符数组,调用函数里指针指过去,这样调用函数运行结束后才能把字符串的内容保存下来,而且因为我只会把指针设置在被调用的函数里,导致我后来试着用malloc改良的时候也只能把malloc放在被调用函数里面,好像是因为malloc只能用在指针里面?这是我本人粗略的理解,请指正
问题4:想要知道更多关于c语言字符串的细节知识,尤其是开发过程中容易踩坑的细节,上面几个问题本质上来说就是我一个初学者对malloc和字符串的一些性质不了解而且没办法自己想明白

img

img

img

本人qq2328714837,我想学到更多有用相关的知识,并愿意支付额外报酬

  • 写回答

3条回答 默认 最新

  • 关注

    这题没必要用指针

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int n;
    LL f[50]={1},g[50]={1},k;
    LL ans(int now,LL kk)
    {
      if(kk>=f[now])
        return g[now];
      if(kk<=now)
        return 0;
      return ans(now-1,kk-1)+min(max(0ll,kk-1-f[now-1]),LL(now))+ans(now-1,kk-1-f[now-1]-now);
    }
    int main()
    {
      for(int i=1;i<=40;i++)
        f[i]=f[i-1]<<1,f[i]+=2+i,g[i]=g[i-1]*2+i;
      scanf("%d%lld",&n,&k);
      cout<<ans(n,k);
      return 0;
    }
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题