注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

融智技术学院

融智技术学院163分站,为广大好友提供更多的帮助

 
 
 

日志

 
 

【C语言每日一问】:C语言中的递归函数  

2014-05-14 16:02:59|  分类: C语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题:

我有一个递归函数,我想要计算里面0的个数,我该如何使用一个常量来计数0而不被重置。

  • int countZeros(int num)
  • {
  •     int count = 0;
  •  
  •     if (num > 0)
  •     {
  •         if (num % 10 == 0)
  •             count++;
  •  
  •         return(countZeros(num / 10));
  •     }
  •     if (num <= 0)
  •         return count;
  •  
  • }

对于我的代码,我的count将会重置一旦我的返回函数被调用的时候。有其它方式阻止这个发生吗?我不得不返回值到我的main函数,然后从哪里显示。

  • case 9:
  •     printf("Enter a number: ");
  •     scanf("%d", &recursion);
  •     printf("number of zeros = %d",countZeros(recursion));
  •     break;

 

回答:

避免静态变了,他们很有害,因为很多原因

有效的算法,不仅仅计数尾部的0,但是,局部变了被释放了

在这里运行它:

  • #include <stdio.h>
  •  
  • int main(void)
  • {
  •     printf("Count = %d\n", countZeros( 10100) );
  •     printf("Count = %d\n", countZeros(-10010) );
  •     return 0;
  • }
  •  
  • int countZeros(int num)
  • {
  •     // Final stop
  •     if (num == 0 )
  •         return 0;
  •  
  •     // Recursion for numbers to the left
  •     int count = countZeros(num / 10);
  •  
  •     // Increase count if current unit is 0
  •     if (num % 10 == 0)
  •         count++;
  •  
  •     return count;
  • }

温馨提示:您的支持与理解,是我们工作最大的动力。如果您是从网上购买的图书,请在对应的网店,给予本书一个好评,我们将衷心感谢!!!
以下是《轻松学C语言》对应的购书评论地址:
当当网http://product.dangdang.com/23246575.html
亚马逊http://www.amazon.cn/dp/B00CIXGTOS
京东网http://item.jd.com/11235318.html

 

  评论这张
 
阅读(36)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017