橙猫猫缺大德 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 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了