C ++:使用递归来查找字符串中最小值的POSITION?

时间:2015-05-03 08:15:50

标签: c++ arrays recursion position

如何使用递归来查找字符串中最小值的POSITION?我唯一允许的2个参数是数组及其大小。

3 个答案:

答案 0 :(得分:0)

如果是普通数组,则可以修改指针(并相应地减小大小)以使“子数组”传递到下一个递归级别。像这样:

size_t minpos(int *arr, size_t length)
{
    if(length < 2) return 0;

    size_t pos1 = minpos(arr + 1, length - 1);

    if(arr[pos1] < arr[0]) return pos1 + 1;
    else return 0;
}

答案 1 :(得分:0)

双参数限制要求您使用一个小技巧:因为您不允许将索引添加为第三个参数,所以请改用长度。您将把递归运行的结果与范围using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; public partial class Form1 : Form { private System.Windows.Forms.Timer tmrClick = new System.Windows.Forms.Timer(); private System.Windows.Forms.Timer tmrWait = new System.Windows.Forms.Timer(); public Form1() { InitializeComponent(); tmrClick.Interval = 2000; tmrClick.Enabled = true; tmrClick.Tick += tmrClick_Tick; tmrWait.Interval = 2000; //SLEEP_AFTER_CLICK_PAGE tmrWait.Enabled = false; tmrWait.Tick += tmrWait_Tick; } private void tmrClick_Tick(object sender, EventArgs e) { label1.Text = "CLICK"; tmrClick.Stop(); tmrWait.Start(); } private void tmrWait_Tick(object sender, EventArgs e) { label1.Text = "WAIT DONE"; tmrWait.Stop(); tmrClick.Start(); } } 的最后一个元素进行比较。

推理是这样的:

  • 如果数组的长度为1,则返回初始元素的索引
  • 否则,运行0..length-1的算法,并将递归调用返回的索引值与最后一个元素的值(即索引length-1)进行比较
  • 如果最后一个元素较小,请返回length-1
  • 否则,返回从递归调用获得的索引

答案 2 :(得分:0)

如果要求在包含字符串的字符数组中找到最小字符,则完全不清楚为什么该函数必须具有两个参数。通常这种处理字符串的算法必须只有一个参数。

所以我编写了一个只有一个参数的函数,并返回除终止零之外的最小字符。

这是函数

#include <iostream>

size_t min_character( const char *s )
{
    if ( s[0] == '\0' ) return 0;

    size_t n = min_character( s + 1 ) + 1;

    return ( s[n] == '\0' ) || !( s[n] < s[0] ) ? 0 : n;
}

int main()
{
    const char *s = "anon123";

    size_t n = min_character( s );

    std::cout << n << ": \'" << s[n] << '\'' << std::endl;

    return 0;
}

程序输出

4: '1'

因为给定字符串中的最小字符是字符“1”,并且从0开始具有poistion.4。

使用两个参数,该函数可以看起来像

size_t min_character( const char *s, size_t n )
{
    if ( n == 0 ) return 0;

    size_t i = min_character( s + 1, n - 1 ) + 1;

    return ( i == n ) || !( s[i] < s[0] ) ? 0 : i;
}