鱼C论坛

 找回密码
 立即注册
查看: 3819|回复: 4

这个递归调用 无法实现是怎么回事?

 关闭 [复制链接]
发表于 2011-6-6 21:59:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 soldier 于 2011-6-7 08:26 编辑

//题目要求 : 对一个字符串 通过函数实现右移长度一半(good->odgo),如果是偶数,则移动n/2 如果是奇数,则(n-1)/2

  1. #include <stdio.h>

  2. #include <string.h>
  3. void move(char str[],int n)
  4. {
  5.         int i,l,t;
  6.     l=strlen(str);
  7.         t=str[l-1];
  8.         for(i=l-1;i>0;i--)
  9.                 str=str[i-1];
  10.         str[0]=t;
  11.         while(n!=1)
  12. move(str,n-1);//想不通啊 ,写成n-1为什么不行,(改成--n就ok的)}
  13. void main()
  14. {
  15.         int i,l,n;
  16.         char s[100];
  17.         printf("input the string:\n");
  18.         gets(s);
  19.         l=strlen(s);
  20.         n=l/2;
  21.         move(s,n);
  22.         printf("The moved string:\n%s\n",s);
  23. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-6 23:51:21 | 显示全部楼层
--n等价n=n-1,结果是要放回变量n的
而不是n-1

在有些情况下,它们看起来效果是一样的,但有些时候就不同了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-7 11:04:34 | 显示全部楼层
主要问题是把while(n!=1)
改为if(n!=1)这样用--n或者n-1都可以了。程序如下:

  1. #include <stdio.h>
  2. #include <string.h>
  3. void move(char str[],int n)
  4. {       
  5.         int i,l,t;       
  6.     l=strlen(str);       
  7.         t=str[l-1];       
  8.         for(i=l-1;i>0;i--)               
  9.                 //str=str[i-1];
  10.                 str[i]=str[i-1];       
  11.         str[0]=t;       
  12.         //while(n!=1)
  13.         if(n!=1)
  14.                 move(str,n-1);//想不通啊 ,写成n-1为什么不行,(改成--n就ok的)}
  15. }
  16. void main()
  17. {       
  18.         int i,l,n;       
  19.         char s[100];       
  20.         printf("input the string:\n");       
  21.         gets(s);       
  22.         l=strlen(s);       
  23.         n=l/2;       
  24.         move(s,n);       
  25.         printf("The moved string:\n%s\n",s);       
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-7 16:58:54 | 显示全部楼层
本帖最后由 galaxy 于 2011-6-7 17:02 编辑

感谢啊
好想知道了
递归的话用if来判断条件就好,

用循环的话 ……循环套循环……实际上无法根本跳出循环……

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-7 18:15:57 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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