递归、

#斐波那契
int fic(int i )
{
  if(i<2)
    return i==0?0:1;
  return fic(i-1)+fic(i-2);
}
#阶乘
int fic(int n )
{
      if(n == 0)
      return 1;
      else return n*fic(n-1);
}
#反向输出任意长度字符串
void fic()
{
      char c;
      scanf("%c",&c);
      if(c != '#') fic();
      if(c != '#') printf("%c",c);
}
#折半查找法  
一、迭代实现
#include <stdio.h>
int search(int arr[],int n,int key)
{
    int mid, low, high;
    
    low = 0;
    high = n-1;
    
    while (low<=high) {
        mid = (low + high)/2;
        if (arr[mid] == key)
        {
            return mid;
        }
        if (arr[mid]<key) {
            low = mid + 1;
        }
        if (arr[mid]>key) {
            high = mid - 1;
        }
    }
//    printf("%d,%d",low,high);
    
    return -1;
}
int main()
{
    int str[11] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
    int n, addr;
    
    printf("请输入待查找的关键字: ");
    scanf("%d", &n);
    
    addr = search(str, 11, n);
    if( -1 != addr )
    {
        printf("查找成功,可喜可贺,可口可乐! 关键字 %d 所在的位置是: %d\n", n, addr);
    }
    else
    {
        printf("查找失败!\n");
    }
    
    return 0;
}


#折半查找法
二、递归实现
#include <stdio.h>
int search(int arr[],int low,int high ,int key)
{
    int mid;
    
    if (low>high)
    {
        return -1;
    }else
    {
        mid = (low + high)/2;
        if (arr[mid] == key)
        {
            return mid;
        }
        if (arr[mid]<key) {
            return search(arr, mid+1, high,key);
        }
        if (arr[mid]>key) {
            return search(arr, low, mid - 1,key);
        }
    }
   
    return -1;
}
int main()
{
    int str[11] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
    int n, addr;
    
    printf("请输入待查找的关键字: ");
    scanf("%d", &n);
    
    addr = search(str, 0, 10, n);
    if( -1 != addr )
    {
        printf("查找成功,关键字 %d 所在的位置是: %d\n", n, addr);
    }
    else
    {
        printf("查找失败!\n");
    }
    
    return 0;
}
#汉诺塔问题(精辟)
#include <stdio.h>

//将n个盘子从x借助y移动到z
void mov(int n,char x,char y,char z)
{
    if (1 == n)
    {
        printf("%c-->%c\n",x,z);
    }else
    {
        mov(n-1, x, z, y);
        printf("%c-->%c\n",x,z);
        mov(n-1, y, x, z);
    }
}
int main()
{
    int n;
    printf("请输入汉诺塔的层数:");
    scanf("%d",&n);
    printf("移动的步骤如下:\n");
    mov(n, 'X', 'Y', 'Z');
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值