如何使用递归来查找字符串中最小值的POSITION?我唯一允许的2个参数是数组及其大小。
答案 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();
}
}
的最后一个元素进行比较。
推理是这样的:
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;
}